# 反射

使用反射可以创建对象,但是相比而言,通过new创建对象的效率较高。因为通过反射创建对象时,先要查找类的资源,使用类加载器创建,过程比较繁琐,效率较低。

# 作用

反射机制是指在运行时,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法。所以在Java中,只要给定类的名字,就可以通过反射机制来获得类的所有信息。这种动态获取的信息以及动态调用对象的方法的功能就称为Java的反射机制

  • 在运行时能够判断任意一个对象所属的类
  • 在运行时构造任意一个类的对象
  • 在运行时判断任意一个类所具有的成员变量和方法
  • 在运行时调用任一对象的方法
  • 在运行时创建新类的对象

# 用途

连接数据库的JDBC就是典型的反射机制,除此之外,Hibernate、Struts等框架也是用反射机制来实现的。

# 实现方式

实现Java反射的类

  • Class:表示正在运行的Java应用程序的类和接口,所有获取对象的信息都需要Class类来实现
  • Field:提供有关类和接口的属性信息,以及对它的动态访问的权限
  • Constructor:提供类的单个构造方法的信息以及它的访问权限
  • Method:提供类或者接口中某个方法的信息

# 优缺点

优点

  • 能够运行时动态获取类的实例,提高灵活性
  • 能够与动态编译相结合

缺点

  • 使用反射性能较低,需要解析字节码,将内存中的对象进行解析