首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
01-26 10:42
快手_机器学习算法部_机器学习算法工程师(准入职员工)
霸王茶姬内推,霸王茶姬内推码
市场部/管培生/运营岗📖 1. HR初面(电话/视频):基础筛选,约20分钟 2. 部门主管复试(现场/视频):专业能力考核,约30-40分钟 3. 总经办终面(现场):综合评估与岗位匹配度,约20分钟 TL参考:投递→1天内HR面→3天内复试→终面→2-3天出结果 - “简单自我介绍一下” ✅ 重点:突出与岗位相关的经历(如活动策划、数据分析),结合品牌调性(国风、年轻化)举例。 - “你了解霸王茶姬吗?最近的市场热点是什么?” ✅ 必答知识点: - 品牌定位:“原味鲜奶茶”赛道,对标星巴克的“东方茶饮文化” - 爆款单品:伯牙绝弦(年销1亿杯+) - 近期热点:春节翻译争议(Lunar ...
点赞
评论
收藏
分享
昨天 09:58
首都经济贸易大学 管理咨询
金蝶的云转型赌局,终于赢在了最后一秒?
这一刻,等得太久了。长达五年的漫长亏损,终于要结束了。日前,金蝶国际发布了备受瞩目的2025财年业绩预告,归母净利润预估在0.6亿到1亿之间。这份财报对于金蝶最大的意义,并不是盈利了多少,而是终于扭亏为盈了。这对于金蝶来说,无疑是一个振奋人心的好消息。AI终于兑现了承诺我们先来看看金蝶国际这份2025年的财报预告业绩成色几何。总营收方面,金蝶国际预估实现69.5亿-70.5亿,同比增长11.1%到12.7%。从营收来看,金蝶国际的总体增速还是比较稳健,最有看点的是云业务正在成为金蝶国际的绝对主力。归母净利润方面,金蝶国际预估实现0.6亿-1亿,告别长达5年时间的连续亏损,终于扭亏为盈,这是最核...
点赞
评论
收藏
分享
01-09 13:28
已编辑
深圳大学 产品经理
寒假实习
昨天在实习公司面试其他公司被同事发现,然后被反馈给主管。要下班的时候谈话直接被开除 哈哈哈哈哈实习实习 深圳!! 有没有推荐或者继任的产品 运营 供应链都可以!
牛客60887332...:
你这考研不是成了反向考了吗
你开始找寒假实习了吗?
点赞
评论
收藏
分享
01-12 17:45
门头沟学院 Java
这hr给我气笑了
这就是不想好好聊呗
叁六玖:
这样的应该钱不多,以前我也被问,我在问他们实习公工资多少,一般都是2200-2800
找实习记录
点赞
评论
收藏
分享
01-26 20:09
西安邮电大学 后端工程师
大厂的后端需求流程是什么样的?
一句话总结:先看这个需求是否合理:需求评审会,再看这个需求给谁做:排期,那你打算怎么做:技术评审,做的怎么样:code review,测试介入。发布这个需求:上线需求评审会:这个实习生都不一定能参与,其实就是产品提完需求之后,大家一起聊一下这个需求的合理性,可行性和价值。一起对其一下对这个项目的理解。排期:看谁最近手里有空闲时间,就把这个需求给谁做。大厂内部都有一个类似日历的东西,相当于需求的时间管理表。你要和各个同学,比如产品,前端,测试协调好时间。比如你说你1.6-1.9预估完成这个需求,那前端是不是预估1.9-1.10完成前端需求?测试是不是预估1.10-1.11完成这个需求?技术评审:...
代码之外的生存之道
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
牛客吐槽大会 | 有槽不吐,留着过年?吐完领现金红包,痛快!
2139
2
...
J人永远闲不下来于是去提前实习
1936
3
...
拥抱AI,程序员的最后出路
1859
4
...
mentor视角下的优秀实习生
1717
5
...
真正会被取代的,是你心里面的幻觉
1617
6
...
努力挣钱的意义具象化了
1368
7
...
大厂提前实习对AI开发的新感悟
1301
8
...
马斯克最新炸裂采访,AI会带走一半工作岗位,普通人将何去何从?
1259
9
...
去独角兽做龙头还是去大厂做凤尾
1202
10
...
我身材再曼妙,也没有我的工资好笑!
1177
创作者周榜
更多
正在热议
更多
#
牛客吐槽大会
#
2794次浏览
63人参与
#
机械人你知道哪些单休企业
#
83064次浏览
414人参与
#
今年春招是金一银二嘛?
#
8117次浏览
111人参与
#
参加完秋招的机械人,还参加春招吗?
#
103638次浏览
684人参与
#
1月小结:你过的开心吗?
#
1841次浏览
51人参与
#
抛开难度不谈,你最想去哪家公司?
#
4280次浏览
110人参与
#
为什么有人零实习也能进大厂?
#
4986次浏览
121人参与
#
AI求职实录
#
3485次浏览
101人参与
#
AI时代的工作 VS 传统时代的工作,有哪些不同?
#
8219次浏览
197人参与
#
机械人春招想让哪家公司来捞你?
#
379240次浏览
3140人参与
#
当你问AI“你会取代我的工作吗”,它说_?
#
3663次浏览
134人参与
#
你的第一家实习公司是什么档次?
#
4187次浏览
70人参与
#
没关系,至少我的__很曼妙
#
3678次浏览
65人参与
#
赚钱的意义在这一刻具象化
#
3916次浏览
94人参与
#
你的landing期是如何度过的?
#
8591次浏览
163人参与
#
除了Java,最推荐学什么技术?
#
5657次浏览
144人参与
#
我发现了面试通关密码
#
1599886次浏览
19678人参与
#
一人一道大厂面试题
#
114091次浏览
1263人参与
#
你觉得什么岗位会被AI替代
#
36775次浏览
255人参与
#
你在职场上见过哪些“水货”同事
#
30737次浏览
167人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务