☺ 面试聊聊反射机制?
Java的反射机制:是指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。这种 动态获取程序信息以及动态调用对象的功能
称为Java语言的反射机制。
☺ 聊一下反射的原理?
java程序运行前,先会将java程序 编程 生成 .class 字节码文件,在程序运行过程中,使用到某个类,内存还没存在该类,那么 虚拟机就会先将该类加载到内存
。同时, 虚拟机会产生一个 java.lang.class 对象,代表该字节码文件。
通过Class 对象可以得到大量的Method、Constructor、Filed 等对象,这些对象分别代表该类所包含的方法、构造器、属性等等;反射的工作原理就是通过这些对象来执行实际的功能,例如调用方法、创建实例等等。
☺ 聊一下反射的优缺点?
优点:
- 增加了程序的灵活性:例如Spring框架中,利用xml 配置文件解析bean的过程,就是反射的典型应用场景。
- 增加了程序的拓展性:可以在不知道运行哪一个类的情况下,还能获取到类的信息,去创建对象以及操作对象;在程序中我们无须将对象的类型硬编码写死,可以更加方便地实现拓展,降低耦合度。
缺点:
- 更容易出现运行错误:使用显示的类和接口,编译器可以帮我们做类型检查,但是使用反射却是需要等到程序运行才知道对象的类型
- 性能比较低:反射是一种解释操作, 在访问字段和调用方法前,
需要先获取到Filed、Method
,性能相对会低一些。 - 安全性问题:通过反射可以修改任意的
私有字段和访问私有方法
,破坏了类的封装,可能会出现逻辑错误等安全隐患。