基本定义
- 动态加载一个指定的类,并获取该类的所有内容,将字节码文件封装成对象。
基本步骤
- 获得class对象,就是获取到指定的名称的字节码对象。
- 实例化对象,获得类的属性,方法或构造函数。
- 访问属性,调用方法,根据构造函数创建对象。
获取class对象的三种方式
通过对象的getClass()方法来获取
- obj.getClass()
Object obj = new Cat();
Class clazz1 = obj.getClass();// 获得对象具体的类型
如果拿到了某个对象,却不知道该对象是什么类型,此方法可以获取到类型
用于获取对象的类型
通过类名来获取
- Class.forName(className)
String className = “com.fall.hat.Cat”;
Class clazz1 = Class.forName(className);// 此对象代表Cat.class
用于类加载
明确的获取某个类的Class对象
- Class clazz1 = Cat.Class;
主要用于传参
反射的用法
反射类的成员方法
Method method = clazz1.getMethod(methodName,new Class[]{paramClazz1,ParamClazz2,…});
method.invoke();
反射类的构造函数
Constructor con = clazz1.getConstructor(new Class[]{paramClazz1, paramClazz2,…})
con.newInstance(params…)
反射类的属性
Field field = clazz1.getField(fieldName);
field.setAccessible(true);
field.setObject(value);
- 获取到字节码文件对象之后,最终都要创建指定类的对象