reflection是什么?反射:指在运行时通过反射API获取类的内部信息,可以直接操作任何对象的属性和方法。当一个类被加载时,这个类的信息存放在Java虚拟机的方法区,这个类的对象实例存放在虚拟机的堆中。通过方法区获取和操作一个类,就像是通过一面镜子反射堆上的对象。JDK提供了java.lang.Class类来支持反射机制。java.lang.Class类的理解就是Java中的一切都是对象,我们创建的类本身就是一个对象。Java程序通过javac命令编译生成一个或多个字节码文件(.class),一个字节码文件对应一个唯一的类或接口的定义信息;然后用java命令解释一个字节码文件运行(类加载)相当于把这个字节码文件加载到内存中,我们称之为运行时类,而这个运行时类其实就是一个java.lang.Class对象。也就是说,一个Class实例对应一个运行时类。加载到内存中的运行时类会被缓存一段时间。在这段时间里,我们可以通过不同的方法获取运行时类,那么如何获取运行时类,即Class实例呢?获取Class实例的方法//方法一:调用运行时类的.class属性Classclazz1=Student.class;//Student是我们自定义的类//方法二:调用运行时类的getClass方法Students=newStudent();Classclazz2=p1.getClass();//方法三:调用Class类的静态方法:forName(StringclassPath)Classclazz3=Class.forName("com.example.java.Student");//这个方法用的比较多。哪些数据类型可以获得Class实例?对象、接口、数组、枚举类、注解、基本数据类型、void类型、Class本身。通过反射操作创建运行时类的对象://通过newInstance()方法(运行时类必须有一个可见的空参数构造函数)Class
