通过反射操作字节码class文件。
反射相关类在 java.lang.reflect.* 包下,
- java.lang.Class:字节码,一个类型 java.lang.reflect.Methond:代表字节码中的方法字节码,
- java.lang.reflect.Constructor:代表字节码中的构造方法字节码,
- java.lang.reflect.Field:代表字节码中的属性字节码
获取字节码三种方式
- Clasd.forName(“”) 参数必须是完整类名,是一个静态方法
- 对象.getClass()方法
- 类型.class属性
获取到class,能干什么?
- 通过Class的newInstance()方法来实例化对象。
- 注意:newInstance()方法内部实际上调用了无参数构造方法,必须保证无参数构造方法存在,否则实例化异常
- 只希望类的静态代码块执行,其他代码不执行,就用 Class.forName()
- 资源绑定器uril包下 ResourceBundle.getBundle(“文件名”) 获取类路径下文件,文件必须是properties
反射获取属性field
Class myClass = Class.forName(“类的包路径 com.xxxx.java.bean.My”);
myClass.getFields(); 这个方法只能获取pubic修饰的field对象
myClass