一、Java反射机制定义
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。运行状态,如下图红框所示。
反射的实质:在运行状态下,通过类的class字节码,获取类的实例、成员变量和方法。

说明1:Java有两种状态。1.编译时:通过 javac 命令,生成一个或多个.class字节码文件(每个.class字节码文件对应一个类);2.运行时:通过 java 命令,将一个或多个.class字节码文件加载到内存中(由JVM提供的类加载器完成)。
说明2:对比正常实例化对象和反射机制实例化对象

二、Java反射机制的功能及API
2.1 Java反射机制的功能
1. 在运行时判断任意一个对象所属的类;
2. 在运行时构造任意一个类的对象;
3. 在运行时判断任意一个类所具有的成员变量和方法;
4. 在运行时调用任意一个对象的成员变量和方法;
2.2 Java反射机制的API
java.lang.Class:代表一个类
java.lang.reflect.Method:代表类的方法
java.lang.reflect.Field:代表类的成员变量
java.lang.reflect.Constructor:代表类的构造方法
三、Java反射机制的实例化对象
实例化Class类对象的四种方法:
1. Class clazz = String.class;
// 若已知具体的类,通过类的class属性获取,该方法最为安全可靠,程序性能最高
2. Person person = new Person();Class clazz = person.getClass();
// 已知某个类的实例,调用该实例的getClass()方法获取Class对象
3. String className = “java.lang.String”;Class clazz = Class.forName(className);
// 已知一个类的全类名,且该类在类路径下,可通过Class类的静态方法forName()获取,可能抛ClassNotFoundException
4. ClassLoader cl = this.getClass().getClassLoader();Class clazz = cl.loadClass(“类的全类名”);
// 通过类加载器来获取
