Java反射面试题

x33g5p2x  于2022-02-07 转载在 Java  
字(0.9k)|赞(0)|评价(0)|浏览(333)

什么是反射?

Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它任意一个方法和属性。这种动态获取类信息以及动态调用对象方法的功能称为Java语言的反射机制。

哪里用到反射机制?

  1. JDBC中,利用反射动态加载了数据库驱动程序。
  2. Eclispe、Idea等开发工具利用反射动态刨析对象的类型与结构,动态提示对象的属性和方法。
  3. 很多框架都用到反射机制,注入属性,调用方法,如Spring、Mybatis

反射机制的优缺点?

优点:可以动态执行,在运行期间根据业务功能动态执行方法、访问属性,最大限度发挥了java的灵活性。

缺点

  • 对性能有影响,这类操作总是慢于直接执行java代码。
  • 相对不安全,破坏了封装性(因为通过反射可以获得私有方法和属性)

为什么Java反射效率不高?

  • Method#invoke 方法会对参数做封装和解封操作
  • 需要检查方法可见性
  • 需要校验参数
  • Method#invoke 就像是个独木桥一样,各处的反射调用都要挤过去,在调用点上收集到的类型信息就会很乱,影响内联程序的判断
  • JIT 无法优化。由于反射涉及动态解析的类型,因此无法执行某些Java虚拟机优化。因此,反射式操作的性能比非反射式操作要慢

Java反射机制的作用

  1. 在运行时判断任意一个对象所属的类
  2. 在运行时构造任意一个类的对象
  3. 在运行时判断任意一个类所具有的成员变量和方法
  4. 在运行时调用任意一个对象的方法

如何使用Java的反射?

请看该篇文章【Java反射机制】

实现Java反射相关的类

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

反射使用步骤(获取 Class 对象、调用对象方法)

  1. 获取想要操作的类的 Class 对象,他是反射的核心,通过 Class 对象我们可以任意调用类的方法。
  2. 调用 Class 类中的方法,既就是反射的使用阶段。
  3. 使用反射 API 来操作这些信息。

相关文章