首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
全部评论
推荐
最新
楼层
暂无评论,快来抢首评~
相关推荐
2025-12-30 01:08
美团_测试开发
不需要所有人都“喜欢”我们
最近年底,各个大厂基本都在忙着年度述职,这里可以和大家科普一下,所谓的年度述职就是在老板面前汇报你这一年的工作,你这一年都干了 什么 ,当初给你制定的目标(OKR) 有没有完成呀等等。一般就是写个文档或者ppt然后组内轮流汇报,也就相当于期末考试了,最后的成绩是关联你的年终奖的。所以那些15薪18薪的,多出来的几个月工资你能不能拿的满是要看你今年的表现的,表现的好可能拿满或者拿到120%,表现得不好可能就拿到80%或者50%,再或者没有年终奖得也不是没有可能。一直都在比然后从上面的述职就想到了从小到大我们一直在被要求超过别人,从上学的考试成绩,到上班拿多少得薪资,再到结婚找了个多好得对象,再往...
我们是不是被“优绩主义”...
点赞
评论
收藏
分享
01-01 12:46
上海交通大学 算法工程师
拼多多招商运营面试:Temu为什么能短时间内壮大规模?
一、面试题简述你能从你的理解出发,谈谈 Temu 为什么能在这么短时间内做大规模吗?二、面试官想听的1、逻辑意识:能否抓住关键因果链,而不是罗列信息。2、商业理解:是否看得到模式背后的核心竞争力。3、结构化表达:能否从外部看机会-内部看能力-行动拆解三个维度来组织答案。4、岗位相关性:是否能把 Temu 的增长逻辑与招商运营挂钩,而不是停留在抽象商业分析。三、面试回答距离我认为Temu的快速扩张,本质上来源于规模化供给 + 端到端控制 + 高能运营节奏的系统能力,而最大的核心其实是:中国供应链的效率,由Temu的强中心运营体系最大化释放出来。详情请参考:http://xhslink.com/o...
查看1道真题和解析
点赞
评论
收藏
分享
2025-11-07 16:07
复旦大学 运营
阿里hr面,名不虚传
阿里hr面真的给我面一身汗
前端飞升:
学长,阿里不是卡双非吗,我深也能去吗
点赞
评论
收藏
分享
昨天 18:19
蓝禾技术_电商事业部_电商运营管培生(准入职员工)
蓝禾科技内推,蓝禾科技内推码
面经:蓝禾的流程推得很快,基本上投完两天就接到了hr的初试电话,直接进行了初试。初试全程大概三十分钟,hr小哥态度很和善。主要问了实践经历获奖的情况最有成就感的事情对电商运营的理解选择公司的标准等,都是比较常规的问题。禾你一起,做不可能的事 | 蓝禾26届校招启动啦公司介绍:蓝禾2008年成立于深圳,是一家集产品、设计、研发、品牌、营销、大数据运营于一体的创新型科技公司,旗下拥有图拉斯TORRAS、锐舞RANVOO、卡斯酷CASEKOO等多个品牌招聘岗位:运营(国内)、运营(国外)、营销、设计、研发技术、职能工作地点:深圳内推链接:https://lanhevip.jobs.feishu.cn...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
为什么你的实习是“无效实习”?又该如何做
4600
2
...
都 2026 年了,还在神话 AI Agent开发吗?
1869
3
...
2025找工年终总结
1405
4
...
双非终于上岸了!!!!
1175
5
...
uu们,面试的时候一定要大大方方的啊!
1150
6
...
简历求锐评,211硕士找实习
973
7
...
元启视界一面(12-31号下午3点)
766
8
...
27届暑期实习准备指南!!
617
9
...
字节实习生涨薪保真?
616
10
...
第一次感受到世界上有些人真的有优越感
597
创作者周榜
更多
正在热议
更多
#
机械/制造每日一题
#
82178次浏览
1431人参与
#
非技术2023笔面经
#
317209次浏览
2686人参与
#
机械求职避坑tips
#
82701次浏览
538人参与
#
工作中,努力重要还是选择重要?
#
248619次浏览
2413人参与
#
应届生,你找到工作了吗
#
97755次浏览
598人参与
#
如果秋招能重来,我会____
#
79769次浏览
471人参与
#
面试紧张时你会有什么表现?
#
21211次浏览
154人参与
#
为了找工作你投递了多少公司?
#
99625次浏览
685人参与
#
对2025年忏悔
#
10509次浏览
188人参与
#
春招前还要继续实习吗?
#
13187次浏览
146人参与
#
每个月的工资都是怎么分配的?
#
81751次浏览
665人参与
#
虾皮求职进展汇总
#
362889次浏览
2768人参与
#
影石Insta360求职进展汇总
#
169491次浏览
1345人参与
#
哪些公司笔/面试难度大?
#
7523次浏览
35人参与
#
AI时代,哪些岗位最容易被淘汰
#
26112次浏览
223人参与
#
你面试被问到过哪些不会的问题?
#
107376次浏览
1879人参与
#
秋招被确诊为……
#
280634次浏览
1589人参与
#
大疆的机械笔试比去年难吗
#
96399次浏览
767人参与
#
电信求职进展汇总
#
36067次浏览
191人参与
#
2025秋招体验点评
#
87039次浏览
726人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务