1. 反射机制
2 获取Class对象
【源码阶段】使用Class.forName(“全限定类名”);
Class<?> aClass = null;
try {
aClass = Class.forName("com.zcc.impl");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(aClass);
【Class对象阶段】使用类.class
Class<test> testClass = test.class;
【运行阶段】对象.getClass()方法
Class<? extends test> aClass1 = new test().getClass();
2 反射获取构造方法
【Constructor】Class类的newInstance方法是用无参的构造函数创建对象的
test test = aClass1.newInstance();
如果一个类没有无参的构造函数,就需要用getConstructor方法获取一个指定的构造函数,然后调用newInstance方法创建对象
Constructor c = aClass.getConstructor(String.class,int.class);
test p = (test)c.newInstance("张三", 23);
3 反射获取成员变量并利用
Field fo= aClass.getField("sex");//public修饰的成员变量
fo.set(o1,"男");
System.out.println(o1);
//获取私有的成员变量
Field f = aClass.getDeclaredField("name");
f.setAccessible(true);
f.set(o1, "李斯");
System.out.println(o1);
4 获取成员方法
Method m1 = aClass.getMethod("getAge");//无参的方法
int age = (int)m1.invoke(o1);
System.out.println(o1.getName()+","+age);
Method m2 = aClass.getMethod("setAge", int.class);//有参的构造方法
m2.invoke(o1,10);
System.out.println(o1);