一:得到一个类的三种方式
Class clazz1 = Person.class;
Class clazz2 = new Person().getClass();
Class clazz3 = Class.forName("Person");
二:得到这个类的方法
公开方法:
Method method = class.getMethod("方法名",方法参数类型)
私有方法:
Method method = class.getDeclaredMethod("方法名",方法参数类型)
三:调用这个方法
公开方法调用:
method.invoke("这个类的实例class.newInstance()", 传给方法的参数)。
私有方法调用:
method.setAccessible(true)
method.invoke("这个类的实例class.newInstance()", 传给方法的参数)。
四:得到这个类的属性
公开方法:
Field field = class.getField("方法名")
私有方法:
Field field = class.getDeclaredField("方法名")
五:调用这个字段
私有字段:
field.setAccessible(true)
field.set("这个类的实例",设置的值)
公有字段:
field.set("这个类的实例",设置的值)
六:反射构造方法
公有构造函数
Constructor constructor = class.getConstructor(参数类型)
私有构造函数
Constructor constructor = class.getDeclaredConstructor(参数类型)
constructor.setAccessible(true)
七:通过得到的构造函数对象创建实例
constructor.newInstance(构造方法的参数)
八:创建一个对象实例的三种方式
Person p = new Person();
Person p = Person.class.newInstance();
Class class = Person.class;
Constructor c = class.getConstructor();
Person p = c.newInstance();