Java反射机制
定义
在程序运行时动态访问、修改类的属性(状态)和方法(行为)的一种机制(无论修饰权限范围)。
功能
通过类构造实例
通过实例获取类
获取类的实例变量和方法
调用任意实例方法
应用
操作因访问权限限制的属性和方法
field.setAccessible(true);
实现自定义注解
if(DemoService.class.isAnnotation()){}
通过反射越过泛型检查
ArrayList<Integer> arrayList = new ArrayList<Integer>();
Class clazz = arrayList.getClass();
Method method= clazz.getMethod("add", Object.class);
method.invoke(arrayList, "string");
加载第三方Jar
Class<?> clazz = new URLClassLoader(new URL[] { "#{jarFilePath}" }).loadClass("#{classFullName}");
按需加载类
// 类没有进行过初始化,则触发其初始化。
method.invoke("#{methodName}", parameterType.class...);
工作原理
class文件在程序运行时会被ClassLoader加载到虚拟机中,Java虚拟机就会在内存中自动产生一个Class对象,创建实例时就是通过Class对象。借助Class.java、Constructor.java、Method.java、Field.java这四个类在程序运行时动态访问和修改任何类的行为和状态。
浙公网安备 33010602011771号