获取Class对象
一:任何一个类都有一个隐含的静态成员变量class,这种方式是通过获取类的静态成员变量class得到的
Class class1=XXX.class
二:xxx是XXX的一个对象,这种方式是通过一个类的对象的getClass()方法获得的
Class class2=xxx.getClass( )
三:Class类调用forName方法,通过一个类的全量限定名获得
Class c3 = Class.forName(“com.trigl.reflect.Code”);
获取成员方法信息
// 得到该类所有的方法,不包括父类的
public Method getDeclaredMethod(String name, Class<?>... parameterTypes)
// 得到该类所有的public方法,包括父类的
public Method getMethod(String name, Class<?>... parameterTypes)
获取所有方法的数组:
Class c = Class.forName("com.mohon.Person");
// 得到该类所有的方法,不包括父类的
Method[] methods = c.getDeclaredMethods();
// 得到该类所有的public方法,包括父类的
Method[] methods = c.getMethods();
获取成员变量信息
// 获得该类自身声明的所有变量,不包括其父类的变量
public Field getDeclaredField(String name)
// 获得该类自所有的public成员变量,包括其父类变量
public Field getField(String name)
获取所有成员变量的数组
Field[] fields = c.getDeclaredFields();
获取构造函数
// 获得该类所有的构造器,不包括其父类的构造器
public Constructor<T> getDeclaredConstructor(Class<?>... parameterTypes)
// 获得该类所以public构造器,包括父类
public Constructor<T> getConstructor(Class<?>... parameterTypes)
注意newInstance
Class的newInstance方法,只能创建只包含无参数的构造函数的类.
如果某类只有带参数的构造函数,那么就要使用另外一种方式:fromClass.getDeclaredConstructor(String.class).newInstance("参数")
;
获取该类的所有构造函数,放在一个数组中
Constructor[] constructors = c.getDeclaredConstructors();