public class Text {
public static void main(String[] args) throws Exception {
Class<?> aClass = Class.forName("Demo1.Demo2.Teacher");
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object o = declaredConstructor.newInstance();
System.out.println(o);
Constructor<?> declaredConstructor1 = aClass.getDeclaredConstructor(String.class, int.class);
declaredConstructor1.setAccessible(true);
Object 张三 = declaredConstructor1.newInstance("张三", 23);
System.out.println(张三);
Constructor<?>[] declaredConstructors = aClass.getDeclaredConstructors();
System.out.println(declaredConstructors);
}
}
通过反射获取成员变量并使用
A:获取所有成员变量
public Field[] getFields() 获取所有的成员变量包含从父类继承过来的
public Field[] getDeclaredFields() 获取所有的成员变量 包含私有的 也包含从父类继承过来的成员变量
B:获取单个成员变量
public Field getField(String name)
public Field getDeclaredField(String name)
C:案例演示: 通过反射获取成员变量并使用
给私有字段设置要有设置权限检查
public class text2 {
public static void main(String[] args) throws Exception {
Class<?> aClass = Class.forName("Demo1.Demo2.Student");
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
declaredConstructor.setAccessible(true);
Object o = declaredConstructor.newInstance();
Field money = aClass.getDeclaredField("money");
money.setAccessible(true);
money.setDouble(o,3.12);
Object o1 = money.get(o);
System.out.println(o1);
}
}
通过反射获取无参无返回值成员方法并使用
A:获取所有成员方法
public Method[] getMethods() //获取所有的公共的成员方法不包含私有的 包含从父类继承过来的过来的公共方法
public Method[] getDeclaredMethods()//获取自己的所有成员方法 包含私有的
B:获取单个成员方法
//参数1: 方法名称 参数2:方法行参的class 对象
public Method getMethod(String name,Class<?>... parameterTypes) //获取单个的方法 不包含私有的
public Method getDeclaredMethod(String name,Class<?>... parameterTypes) 获取单个方法包括私有的
C:案例演示: 通过反射获取无参无返回值成员方法并使用