首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Mercuryleafer
华中科技大学 Java
关注
已关注
取消关注
m
@Java三段:
八股整理:说说反射的底层实现原理?
反射是 Java 面试中必问的面试题,但只有很少人能真正的理解“反射”并讲明白反射,更别说能说清楚它的底层实现原理了。所以本文就通过大白话的方式来系统的讲解一下反射,希望大家看完之后能真正的理解并掌握“反射”这项技术。1.什么是反射?反射在程序运行期间动态获取类和操纵类的一种技术。通过反射机制,可以在运行时动态地创建对象、调用方法、访问和修改属性,以及获取类的信息。2.反射的应用有哪些?反射在日常开发中使用的地方有很多,例如以下几个:动态代理:反射是动态代理的底层实现,即在运行时动态地创建代理对象,并拦截和增强方法调用。这常用于实现 AOP 功能,如日志记录、事务管理等。Bean 创建:Spring/Spring Boot 项目中,在项目启动时,创建的 Bean 对象就是通过反射来实现的。JDBC 连接:JDBC 中的 DriverManager 类通过反射加载并注册数据库驱动,这是 Java 数据库连接的标准做法。3.反射实现反射的关键实现方法有以下几个:得到类:Class.forName("类名")得到所有字段:getDeclaredFields()得到所有方法:getDeclaredMethods()得到构造方法:getDeclaredConstructor()得到实例:newInstance()调用方法:invoke()具体使用示例如下:// 1.反射得到对象Class<?> clazz = Class.forName("User");// 2.得到方法Method method = clazz.getDeclaredMethod("publicMethod");// 3.得到静态方法Method staticMethod = clazz.getDeclaredMethod("staticMethod");// 4.执行静态方法staticMethod.invoke(clazz);反射执行私有方法代码实现如下:// 1.反射得到对象Class<?> clazz = Class.forName("User");// 2.得到私有方法Method privateMethod = clazz.getDeclaredMethod("privateMethod");// 3.设置私有方法可访问privateMethod.setAccessible(true);// 4.得到实例Object user = clazz.getDeclaredConstructor().newInstance();// 5.执行私有方法privateMethod.invoke(user);4.底层实现原理从上述内容可以看出,对于反射来说,操纵类最主要的方法是 invoke,所以搞懂了 invoke 方法的实现,也就搞定了反射的底层实现原理了。invoke 方法的执行流程如下:查找方法:当通过 java.lang.reflect.Method 对象调用 invoke 方法时,Java 虚拟机(JVM)首先确认该方法是否存在并可以访问。这包括检查方法的访问权限、方法签名是否匹配等。安全检查:如果方法是私有的或受保护的,还需要进行访问权限的安全检查。如果当前调用者没有足够的权限访问这个方法,将抛出 IllegalAccessException。参数转换和适配:invoke 方法接受一个对象实例和一组参数,需要将这些参数转换成对应方法签名所需要的类型,并且进行必要的类型检查和装箱拆箱操作。方法调用:对于非私有方法,Java 反射实际上是通过 JNI(Java Native Interface,Java 本地接口)调用到 JVM 内部的 native 方法,例如 java.lang.reflect.Method.invoke0()。这个 native 方法负责完成真正的动态方法调用。对于 Java 方法,JVM 会通过方法表、虚方法表(vtable)进行查找和调用;对于非虚方法或者静态方法,JVM 会直接调用相应的方法实现。异常处理:在执行方法的过程中,如果出现任何异常,JVM 会捕获并将异常包装成 InvocationTargetException 抛出,应用程序可以通过这个异常获取到原始异常信息。返回结果:如果方法正常执行完毕,invoke 方法会返回方法的执行结果,或者如果方法返回类型是 void,则不返回任何值。通过这种方式,Java 反射的 invoke 方法能够打破编译时的绑定,实现运行时动态调用对象的方法,提供了极大的灵活性,但也带来了运行时性能损耗和安全隐患(如破坏封装性、违反访问控制等)。5.优缺点分析反射的优点如下:灵活性:使用反射可以在运行时动态加载类,而不需要在编译时就将类加载到程序中。这对于需要动态扩展程序功能的情况非常有用。可扩展性:使用反射可以使程序更加灵活和可扩展,同时也可以提高程序的可维护性和可测试性。实现更多功能:许多框架都使用反射来实现自动化配置和依赖注入等功能。例如,Spring 框架就使用反射来实现依赖注入。反射的缺点如下:性能问题:使用反射会带来一定的性能问题,因为反射需要在运行时动态获取类的信息,这比在编译时就获取信息要慢。安全问题:使用反射可以访问和修改类的字段和方法,这可能会导致安全问题。因此,在使用反射时需要格外小心,确保不会对程序的安全性造成影响。课后思考为什么反射的执行效率比较低?动态代理的实现除了反射之外,还有没有其他的实现方法?参考 & 鸣谢javacn.site
点赞 6
评论 0
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
10-03 11:45
门头沟学院 嵌入式工程师
瑞晟嵌入式开发一面面经
面试时长:20分钟左右 面试形式:线上 1.自我介绍 2.讨论项目:总体介绍、询问技术细节(主控和ADC选型,连接方式(SPI)、主要承担的工作、低功耗策略、算法实现细节等) 3.智力题:如何快速利用天平找出9个球中重量不一样的球 4.对于瑞晟的了解 5.对于苏州的接受度 6.反问
查看5道真题和解析
点赞
评论
收藏
分享
10-02 12:00
元戎启行_软件工程师(准入职员工)
元戎启行内推,元戎启行内推码
元戎启行嵌入式面经(友好)(初次面) 开局直接讲项目,我把最拿得出手的项目一讲(tc377 gps+九轴陀螺仪+摄像头+图像处理)的比赛。期间被多处细问但完美解决。 然后问了一个spi通信原理,我给忘了(我怎么能把这给忘了啊😤😤),只讲了个大概。 问了一个pid,p i d各自含义及用处。 跟面试官讲实话:我才开始背八股文,C++和数据结构还没咋预习,C语言最熟。也就只问了最简单的C语言。(面试官人真的很好😭😭😭) 问了一个二维数组地址是否连续。 问了一个在64位系统下。 short i[]={0,1} printf(sizeof(i)...
点赞
评论
收藏
分享
08-12 10:31
华中科技大学 Java
正在秋招找工作,求建议
bg:双九。实习。本人正在华子实习,但是确实感觉没学到什么东西,主要用Python做一些数据管理的工作,mt做的部分算法框架的工作也可以算我头上,其他的就是代码重构的活了。论文。论文是深度学习方面的,Python语言,但是现在还处于同行评审阶段,如果被拒真就完蛋。项目。上半年实习时做的是烂大街的JAVA后端开发,外卖项目,学的也不算精,只能说背八股选手(背的还一般)。现在就是感觉,这个简历做啥工作都不合适,后端开发经验太少,除非再做一个项目,其他的岗位又不知道能投什么。按照上面的话,建议接下来准备哪个方向好?
eleksj:
我感觉目标明确点,算法后端选一个吧,双9bg还是不错的,pdd上海可以考虑一下
投递华为技术有限公司等公司10个岗位
点赞
评论
收藏
分享
08-27 20:12
江西财经大学 测试开发
后悔接字节offer了
第一天入职,后悔没有早点来😍入职就发m4,配4k显示器,送办公大礼包业务基本纯开不测,做的项目也非常有挑战性麻烦包三餐,食堂非常顶,有一种回大学的错觉😭同事也特别好,第一天一起吃中晚饭聊的特别来,ld也比较年轻好沟通。
钝角p:
干几个10点下班就老实了
投递字节跳动等公司10个岗位
点赞
评论
收藏
分享
不愿透露姓名的神秘牛友
10-01 11:39
中兴电源开发岗一面
1、介绍最近做的最新的一个项目 2、讲一下样机设计中你负责哪些电路设计3、调试中重点关注了哪些波形为什么 4、同步整流中回流问题是否有在实验中观测到 5、如何处理同步整流中的功率回流问题 6、切负载时动态响应时间是多少 7、如果现在需要进一步提高效率你打算怎么做 8、变换器在模态切换时可以做到平滑切换吗 9、讲一下如何才能实现平滑切换 10、碳化硅器件的劣势有哪些 11、驱动电路设计有哪几种常见电路
查看11道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
秋招一周年回过头看,庆幸自己放弃大厂选择体制内
419
2
...
字节OR美团
259
3
...
中科曙光嵌入式面经
150
4
...
秋招看重什么? 大家来做做优先级排序吧
69
5
...
小时候最想当的是很酷的店长
65
6
...
可以年前面试年后入职吗?
65
7
...
不提前实习就不给offer的公司要去吗?
56
8
...
牛可乐国庆旅行篇-西湖
53
9
...
租房一定要看一度电费和有没有冰箱
52
10
...
中秋节 别卷了
52
创作者周榜
更多
正在热议
更多
#
你的实习什么时候入职
#
306619次浏览
2122人参与
#
牛油的搬砖plog
#
112626次浏览
817人参与
#
深信服秋招来了
#
272666次浏览
2905人参与
#
金融财经春招备战日记
#
30466次浏览
166人参与
#
制造业的秋招小结
#
116495次浏览
1972人参与
#
招聘要求与实际实习内容不符怎么办
#
130050次浏览
824人参与
#
携程求职进展汇总
#
640616次浏览
4660人参与
#
你朋友圈最大的人脉是谁?
#
22822次浏览
145人参与
#
如果没找到工作,考公是你的退路吗
#
49882次浏览
398人参与
#
工作两年想退休了
#
164288次浏览
1418人参与
#
什么样的背景能拿SSP?
#
113405次浏览
404人参与
#
26届的你,投了哪些公司?
#
194047次浏览
1187人参与
#
非技术er求职现状
#
102385次浏览
672人参与
#
校招入职后的感受
#
379649次浏览
3224人参与
#
如何快速融入团队?
#
33720次浏览
280人参与
#
你在职场中沾染到的“坏”习惯
#
22472次浏览
145人参与
#
你做过哪些dirty work
#
18930次浏览
139人参与
#
听到哪句话就代表面试稳了or挂了?
#
216439次浏览
1586人参与
#
大学四年该怎么过,才不算浪费时间?
#
13729次浏览
80人参与
#
国庆假期,给大脑放个假
#
5981次浏览
49人参与
#
如果公司降薪,你会跳槽吗?
#
98171次浏览
632人参与
#
你小时候最想从事什么职业
#
124336次浏览
1924人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务