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这四个类在程序运行时动态访问和修改任何类的行为和状态。

posted @ 2020-10-15 14:50  c3p4501  阅读(28)  评论(0)    收藏  举报