1. 反射是什么
加载完类之后,堆内存中就会有Class对象(一个类对应一个Class对象),这个对象包含了类完整的结构信息;我们可以通过这个对象看到类的结构,这个过程称为反射。
反射机制允许在运行期间利用Reflection API获得任何类的内部信息,并操作对象的方法。
通过反射可以调用一个类的私有属性和方法。
2. 类加载
(1)类初始化步骤:
- 如果类还未被加载和连接,则程序先加载并连接该类
- 父类还未被加载,则先加载父类
- 如果有初始化语句,执行初始化语句
(2)类加载器作用:
- 负责将.class文件加载到内存中,并为之生成对应的java.lang.Class对象
- 更好的理解程序运行
3. 反射应用
(1)获取构造方法(全部/单个)
(2)获取成员变量
(3)获取成员方法
public class Demo { public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException { //获取class对象 Class<?> c = Class.forName("Ant.Ant"); //获取单个方法 Method m=c.getMethod("method1"); //获取无参构造方法创建对象 Constructor<?> con = c.getConstructor(); //用构造方法创建实例 Object obj=con.newInstance(); //调用无参方法 m.invoke(obj); } }
(4)获取Class对象的三种方式
Class clazz1=String.class; Class clazz2=solution.getClass(); Class clazz3=Class.forName("com.Kinghao.Person");//更好地体现动态性