Java面试常见问题之反射
谈起反射,首先应该明白什么是反射,反射到底能干啥,以及反射应该怎么用。
反射定义
反射就是在程序运行的过程中,动态地创建类对象,并调用其方法。简单来说就是,反射提供一种运行时才知道类名的对象实例实例的创建方式。与之相对应的是“正射”,即我们常见的通过new关键字来创建一个对象。
反射作用
反射的作用其实在反射定义之中已经给出:实现类对象地动态创建。
反射相关用法
反射用法可以分为三个部分:
- 获取反射中class对象
反射中,class对象的获取有三种方式:
(1)使用Class.forName静态方法。
⚠️注意:该方法使用的前提是已知类的全路径名
(2)使用.class 方法
⚠️注意:该方法适合编译前就已知的类
(3)使用类对象的getClass()方法 - 通过反射创建类对象
(1)通过class对象的newInstance()方法
(2)通过Constructor 对象的newInstance()方法
⚠️注意:该方法可以实现对不同构造方法的灵活调用 - 通过反射获取类的属性、方法、构造器、注解、内部类(注解和内部类只做了解,回答出来可加亮点分)
(1)属性的获取:getFields ()或者getDeclavedFields()
⚠️注意:get Fields()方法获取不可以获取私有属性;getDeclavedFields ()方法获取包括私有属性在内的所有属性。
(2)方法的获取:getMethonds()或者getDeclavedMethonds()
⚠️注意:两种方法的区分类似于属性获取的方法。
(3)构造函数的获取:getConstructor()或者getDeclavedConstructor()
⚠️注意:两种方法的区分类似于属性获取的方法。
用法举例:
Methons配合invoke
Constructor配合newInstance
Filed配合get/set函数
反射进阶问题
- 常见反射实例
- 如何提高反射效率