一、反射机制的最大特点:
- 可以在不导入(import)包到代码里的前提下使用依赖类。
二、反射机制的功能:
- 已知一个实例对象
- 获得该实例对象的本类及父类的指定或全部信息
- 类:类名、父类名、包名等。
- 方法:方法名、方法修饰符列表、返回值类型、参数列表
- 成员属性:属性类型、属性名称
三、实例:
String className = "com.leon.java.reflect.Person";
---->1.得到该字符串所指代类的Class对象
Class<?> cls = Class.forName(className);
---->2.通过该类的Class对象,得到父类Class对象
Class<?> superclass = cls.getSuperclass();
---->3.通过该类的Class对象,得到父接口Class对象
Class<?>[] clazz = cls.getInterfaces();
---->4.通过该类的Class对象,得到该类的构造方法,并实例化对象
Object obj = cls.getConstructor().newInstance();
---->5.通过该类的Class对象,得到该类的普通方法
String setMethodName = "setName";
Method method = cls.getDeclaredMethod(setMethodName, String.class);
---->6.通过该类的实例化对象,使用该方法
method.invoke(obj,value);// 等价于:Person对象.setName(value);
String getMethodName = "getName";
Method getMethod = cls.getDeclaredMethod(getMethodName);//getter没有输出
System.out.println(getMethod.invoke(obj));
---->7.通过该类的实例化对象,获取并修改该类的属性
Field name = cls.getDeclaredField("name");
name.setAccessible(true);//解除封装,否则会访问不了,报错:java.lang.IllegalAccessException
name.set(obj,"小屁孩");
四、类关系图:五、实例关系图: