十九、反射

93 阅读2分钟

首先了解什么是编译器什么是运行期。编译期是指把源码交给编译器编译成计算机可以执行的文件的过程。在 Java 中也就是把 Java 代码编成 class 文件的过程。编译期只是做了一些翻译功能,并没有把代码放在内存中运行起来,而只是把代码当成文本进行操作,比如检查错误。 运行期是把编译后的文件交给计算机执行,直到程序运行结束。所谓运行期就把在磁盘中的代码放到内存中执行起来。

什么是正射 通常通过new来创建对象实例,这种方式在编译的时候就确定了类型信息

什么又是反射就是在运行状态中,通过反射可以获取任意一个类的所有属性和方法,并且还可以调用这些方法和属性,这种动态获取的信息以及动态调用对象的方法的功能就是Java的反射机制

反射的几种实现方式 :

1.Class.forName("类的路径");
2.类名.class;
3.对象名(new User).getClass();
4.基本类型的包装类,可以调用包装类的Type属性来获取该包装类的Class对象

应用场景:

因为平常我们大部分时候都在写业务代码,很少会接触到直接使用反射机制的场景,但是并不代表反射没有用,像Spring/SpringBoot,mybatis等框架中都大量使用了反射机制,像Spring中的很多注解就是利用的反射

优势

  • 增加程序的灵活性,避免将固有的逻辑程序写死到代码里
  • 代码简洁,可读性强,可提高代码的复用率

劣势

  • 相较直接调用,在量大的情景下反射性能下降
  • 存在一些内部暴露和安全隐患

创建对象的几种方式除了反射还有:

  • new创建对象
  • 采用clone机制
  • 通过序列化方式

参考:

反射