Java 反射

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");//更好地体现动态性
原文地址:https://www.cnblogs.com/Kinghao0319/p/13736557.html