Java|面试官你要这么问我Java反射原理,我就笑了
文章图片
文章图片
文章图片
文章图片
文章图片
文章图片
上周我投递出了简历 , 岗位是java后端开发工程师 。 这周美团面试官给我进行了面试 , 面试过程中他问了Java的反射原理 。 (不得不夸一句 , 美团的效率真高 , 上午面完一面 , 晚上二面马上安排上了 。 )
无论什么Java技术岗位 , Java反射原理 , 在面试中出现的次数很多 , 所以我面试之前也有所准备 , 于是今天结合面试问题先详细讲一讲 Java反射原理 。
JAVA反射机制JAVA反射机制是在 运行状态中 ,
对于任意一个类 , 都能够知道这个类的所有属性和方法;
对于任意一个对象 , 都能够调用它的任意一个属性和方法;
这种动态获取的信息以及动态调用对象的方法的功能称为 java语言的反射机制 。
使用场景IDE自动提示功能 , 对象(提示:属性、方法)
不知道类或者对象的具体信息 , 应该使用反射来实现 。
比如类的名称放在XML文件中 , 属性和属性值放在XML文件中 , 需要在运行时读取XML文件 , 动态获取类的信息 。
原理Java在编译之后会生成一个 class文件 , 反射通过 字节码文件 找到其类中的方法和属性等
功能
关键类
Class对象类型标识 , JVM中为每个对象都保留其类型标识信息 。
包含类的所有信息
可以通过该对象获取到 构造方法 , 成员变量 , 成员方法和接口 等信息
获取方法:
通过字面量直接获取 , 例如XXX.class , 不会触发类的初始化但XXX类已经被加载到方法区 。
通过Object类的getClass方法 , 例如Object.getClass() 。 触发类的初始化
通过Class的静态方法 , 例如Class.forName() 。 触发类的初始化
Field成员变量 , 类中的属性对象 。
通过Class类的getDeclaredField()或getDeclaredFields()方法获取
Field的方法主要分为两大类 , 即getXXX和setXXX
Method类中的方法对象 。 包括了静态方法和成员方法(包括抽象方法在内) 。
通过invoke()来完成方法被动态调用的目的 。
非静态变量 , 需要添加对象参数
setAccessible()方法不影响其他对象和原方法
getDeclaredMethod
可以获取 指定方法名和参数 的方法对象 Method 。
privateGetDeclaredMethods从缓存或JVM中获取该Class中申明的方法列表 。
searchMethods从返回的方法列表里找到一个 匹配名称和参数 的方法对象 。
如果找到一个匹配的 Method , 则重新copy一份返回 , 即 Method.copy() 方法 。
推荐阅读
- Java|Java项目搜索功能的实现
- Java|面试三年经验的程序员,感觉简历在造假!连个简单的题目都不会
- 游龙战神|-启动流程,好程序员Java培训分享SpringBoot
- Java|Java重写equals方法时为什么要重写hashCode方法
- 移动互联网|干了两年 Java,自考本科,15k,很难有机会进大厂?
- Java|一份好的 Java 开发简历,让面试官眼前一亮,到底长啥样?
- 尚学堂人工智能学院|总结归纳AI人工智能时代常见的面试题以及解析
- 引领先锋|/ PPTX,Java工程师福利!1分钟学会使用Aspose.PDF将PDF转换为PPT
- 马维英|我只相信数字!Java, 大数据,Python哪个前景更好,薪资更高?
- cpa注会之家|华为面试官是这么说的……,拿到CPA就很牛?不