# 反射
使用反射可以创建对象,但是相比而言,通过new
创建对象的效率较高。因为通过反射创建对象时,先要查找类的资源,使用类加载器创建,过程比较繁琐,效率较低。
# 作用
反射机制是指在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。所以在Java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能就称为Java的反射机制。
- 在运行时能够判断任意一个对象所属的类
- 在运行时构造任意一个类的对象
- 在运行时判断任意一个类所具有的成员变量和方法
- 在运行时调用任一对象的方法
- 在运行时创建新类的对象
# 用途
连接数据库的JDBC就是典型的反射机制,除此之外,Hibernate、Struts等框架也是用反射机制来实现的。
# 实现方式
实现Java反射的类:
Class
:表示正在运行的Java应用程序的类和接口,所有获取对象的信息都需要Class类来实现Field
:提供有关类和接口的属性信息,以及对它的动态访问的权限Constructor
:提供类的单个构造方法的信息以及它的访问权限Method
:提供类或者接口中某个方法的信息
# 优缺点
优点:
- 能够运行时动态获取类的实例,提高灵活性
- 能够与动态编译相结合
缺点:
- 使用反射性能较低,需要解析字节码,将内存中的对象进行解析