Java反射

154 阅读3分钟

1、反射机制是什么?(反射就是在运行时才知道要操作的类是什么,并且可以在运行时获取类的完整构造,并调用对应的方法。

  • Java反射机制的核心是在程序运行时动态加载类并获取类的详细信息,从而操作类或对象的属性和方法。本质是JVM得到class对象之后,再通过class对象进行反编译,从而获取对象的各种信息。
  • Java属于先编译再运行的语言,程序中对象的类型在编译期就确定下来了,而当程序在运行时可能需要动态加载某些类,这些类因为之前用不到,所以没有被加载到JVM。通过反射,可以在运行时动态地创建对象并调用其属性,不需要提前在编译期知道运行的对象是谁。

2、反射使用场景

  • 在编译时根本无法知道该对象或类可能属于哪些类,程序只依靠运行时信息来发现该对象和类的真实信息
  • log4j、servlet、ssm等技术框架都用到了反射技术

3、反射怎么使用?请诠释一下反射的原理。请回答一下RPC架构是怎么使用反射的。

  • 在JVM的层面,java的对象引用不仅要可以直接或间接的接触到对象类型,更应该可以根据索引能得到这个对象的类型数据(Class对象)。这样的JVM设计使得JAVA可以拥有反射功能。

4、为什么要使用反射?(功能强大,非常的有用)

  • 获取任意类的名称、package信息、所有属性、方法、注解、类型、类加载器等

  • 获取任意对象的属性,并且能改变对象的属性

  • 调用任意对象的方法

  • 判断任意一个对象所属的类

  • 实例化任意一个类的对象

  • 通过反射我们可以实现动态装配,降低代码的耦合度,动态代理等。

5、优缺点

优点
  • 反射提高了程序的灵活性和扩展性,降低耦合性,提高自适应能力。
  • 它允许程序创和控制任何类的对象,无需提前硬编码目标类,对于任意一个类,都能够知道这个类的所有属性和方法;
  • 对于任意一个对象,都能够调用它的任意一个方法
缺点

性能问题

使用反射基本上是一种解释操作,用于字段和方法接入时要远慢于直接代码。因此Java反射机制主要应用在对灵活性和扩展性要求很高的系统框架上,普通程序不建议使用

代码可读性降低

程序人员希望在源代码中看到程序的逻辑,反射等绕过了源代码的技术,因而会带来维护问题。反射代码比相应的直接代码更复杂

安全问题

可以越过泛型检查,同时还可以获得私有变量