java反射
反射机制是什么
Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。
Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。
白话理解一下反射:
我们编译时知道类或对象的具体信息,此时直接对类和对象进行操作即可,无需使用反射(reflection)
如果编译不知道类或对象的具体信息,此时应该如何做呢?这时就要用到 反射 来实现。比如类的名称放在XML文件中,属性和属性值放在XML文件中,需要在运行时读取XML文件,动态获取类的信息
1 | public class Test { |
Class类
Java中有一个名为Class的类,该类在运行时保留有关对象和类的所有信息。
Class对象描述了特定类的属性。该对象用于执行反射。
创建Class类的对象
我们可以创建Class的对象,通过使用forName()方法
forName()接受字符串参数(类的名称)并返回Class对象。返回的对象引用字符串指定的类。例如,
1 | Class Dog { } |
getClass()方法使用特定类的对象来创建新的对象Class。例如,
1 | Dog d1 = new Dog() |
我们还可以使用.class扩展名创建Class对象。例如,
1 | Class c1 = Dog.class; |
创建Class对象后,我们可以使用这些对象执行反射,获取接口,超类,方法等等类的信息。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 From Zero to Hero!