java反射之获取类的信息方法(推荐)
本文接上文“老生常谈反射之Class类的使用(必看篇)”,以编写一个用来获取类的信息(成员函数、成员变量、构造函数)的工具类来讲解"反射之获取类的信息"
1、获取成员函数信息
/** *获取成员函数信息 *@paramobj */ publicstaticvoidprintClassMethodMessage(Objectobj){ //获取类的信息获取类的类类型 Classc=obj.getClass(); //获取类的名称 System.out.println("类的名称是:"+c.getName()); /** *Methods类,方法对象 *一个成员方法就是一个Method对象 *getMethods()方法是获取所有public的函数,包括父类继承而来 *getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限 */ //Method[]ms=c.getMethods(); Method[]ms=c.getDeclaredMethods(); for(Methodm:ms){ //得到方法返回值的类类型 ClassreturnType=m.getReturnType(); System.out.print(returnType.getName()+""); //得到方法名称 System.out.print(m.getName()+"("); //获取参数类型(得到的是参数列表的类型的类类型) Class[]paramTypes=m.getParameterTypes(); for(ClassparamType:paramTypes){ System.out.print(paramType.getName()+","); } System.out.println(")"); } }
2、获取成员变量信息
/** *获取成员变量信息 *@paramobj */ publicstaticvoidprintClassFieldMessage(Objectobj){ Classc=obj.getClass(); /** *成员变量也是对象 *Field类封装了关于成员变量的操作 *getFields()获取的是所有的public的成员变量信息 *getDeclaredFields()获取的是该类自己声明的成员变量信息 */ //Field[]fs=c.getFields(); Field[]fs=c.getDeclaredFields(); for(Fieldf:fs){ //得到成员变量的类型的类类型 ClassfieldType=f.getType(); StringtypeName=fieldType.getName(); //得到成员变量的名称 StringfieldName=f.getName(); System.out.println(typeName+""+fieldName); } }
3、获取构造函数信息
publicstaticvoidprintConMessage(Objectobj){ Classc=obj.getClass(); /** *构造函数也是对象 *java.lang.Constructor封装了构造函数的信息 *getConstructors()获取所有的public构造函数 *getDeclaredConstructors()获取所有的构造函数 */ //Constructor[]cs=c.getConstructors(); Constructor[]cs=c.getDeclaredConstructors(); for(Constructorconstructor:cs){ System.out.print(constructor.getName()+"("); //获取构造函数的参数列表,得到的是参数列表的类类型 Class[]paramTypes=constructor.getParameterTypes(); for(ClassparamType:paramTypes){ System.out.print(paramType.getName()+","); } System.out.println(")"); } }
4、工具类代码
packagecom.format.util; importjava.lang.reflect.Constructor; importjava.lang.reflect.Field; importjava.lang.reflect.Method; /** *打印类的信息,成员函数、成员变量 *CreatedbyFormaton2017/6/3. */ publicclassClassUtil{ /** *获取成员函数信息 *@paramobj */ publicstaticvoidprintClassMethodMessage(Objectobj){ //获取类的信息获取类的类类型 Classc=obj.getClass(); //获取类的名称 System.out.println("类的名称是:"+c.getName()); /** *Methods类,方法对象 *一个成员方法就是一个Method对象 *getMethods()方法是获取所有public的函数,包括父类继承而来 *getDeclaredMethods()获取的是所有该类自己声明的方法,不问访问权限 */ //Method[]ms=c.getMethods(); Method[]ms=c.getDeclaredMethods(); for(Methodm:ms){ //得到方法返回值的类类型 ClassreturnType=m.getReturnType(); System.out.print(returnType.getName()+""); //得到方法名称 System.out.print(m.getName()+"("); //获取参数类型(得到的是参数列表的类型的类类型) Class[]paramTypes=m.getParameterTypes(); for(ClassparamType:paramTypes){ System.out.print(paramType.getName()+","); } System.out.println(")"); } } /** *获取成员变量信息 *@paramobj */ publicstaticvoidprintClassFieldMessage(Objectobj){ Classc=obj.getClass(); /** *成员变量也是对象 *Field类封装了关于成员变量的操作 *getFields()获取的是所有的public的成员变量信息 *getDeclaredFields()获取的是该类自己声明的成员变量信息 */ //Field[]fs=c.getFields(); Field[]fs=c.getDeclaredFields(); for(Fieldf:fs){ //得到成员变量的类型的类类型 ClassfieldType=f.getType(); StringtypeName=fieldType.getName(); //得到成员变量的名称 StringfieldName=f.getName(); System.out.println(typeName+""+fieldName); } } /** *获取构造函数信息 *@paramobj */ publicstaticvoidprintConMessage(Objectobj){ Classc=obj.getClass(); /** *构造函数也是对象 *java.lang.Constructor封装了构造函数的信息 *getConstructors()获取所有的public构造函数 *getDeclaredConstructors()获取所有的构造函数 */ //Constructor[]cs=c.getConstructors(); Constructor[]cs=c.getDeclaredConstructors(); for(Constructorconstructor:cs){ System.out.print(constructor.getName()+"("); //获取构造函数的参数列表,得到的是参数列表的类类型 Class[]paramTypes=constructor.getParameterTypes(); for(ClassparamType:paramTypes){ System.out.print(paramType.getName()+","); } System.out.println(")"); } } }
以上这篇java反射之获取类的信息方法(推荐)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。