首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
课程
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
搜索
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
在线笔面试、雇主品牌宣传
登录
/
注册
Mercuryleafer
华中科技大学 计算机类
关注
已关注
取消关注
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
全部评论
推荐
最新
楼层
国泰君安
校招火热招聘中
官网直投
相关推荐
在度假的布拉德很亲切
06-07 13:21
淘天集团_HR
淘天集团25届实习生补招
没找到实习的也不用焦虑,暑期可以好好准备论文,八股和算法,毕竟实习也只是一个title背书,只要一直在努力总会有机会的另外不要以为到了6月份实习没开就凉了,很多大佬开始释放hc了,并且七月入职的也不在少数, 现在急招补录实习生,下面这四个岗位比较缺人,可以优先投递下,进度和offer都会很快的。其他岗位也有在招,可以扫内推码查看,招满了就会下线。技术类:算法工程师-计算机视觉、算法工程师-自然语言处理、客户端开发工程师-iOS、客户端开发工程师-Androidbase:杭州住宿、交通、餐饮等各类补贴通通到位实习同时有机会提前转正🙌投递方式:可以扫码投递也可以链接点击一键内推投递后可以评论区...
投递淘天集团等公司10个岗位 >
点赞
评论
收藏
分享
独特的土拨鼠在拧螺丝
06-14 09:20
北京师范大学 地理学
Momenta面试记录
一面1、自我介绍2、考察代码熟练度和对框架的掌握度,手写一个vue2/3的简易计算器二面1、自我介绍2、项目问题2.1 对多源互联网数据的感知包括哪些方面?灾害感知:挖掘带地理位置信息的文本内容的时空变化趋势,挖掘灾害的演化过程和发展趋势,揭示主题演化过程和灾情发展状况和灾情分布范围。舆情监测:利用LDA模型和情感分析方法挖掘企业的评论数据,分析用户的情感倾向和影响因素,可以帮助企业调整服务质量。场所认知:获取旅游相关的社交媒体数据,分析游客的情绪特征、满意程度,从而感知旅游场所的形象和用户满意度。2.2采用了什么三维技术实现可视化功能?采用cesiumjs实现2.3大量三维数据量渲染导致页面...
查看11道真题和解析
26届前端日常实习面经
点赞
评论
收藏
分享
点赞
收藏
评论
分享
回复帖子
提到的真题
返回内容
全站热榜
1
...
5000字说透简历和面试核心要点
3.2W
2
...
手上只有1个看不上的实习offer要不要去?
6116
3
...
你怎么看今年的秋招?预测一波
5201
4
...
关于实习的转正、边秋招、没实习的相关问题
4286
5
...
好未来面试记录
2530
6
...
重庆移动实习
1938
7
...
三句话,让辅导员沉默一个小时 #FPGA# #我的求职思考#
1883
8
...
华为云开奖
1875
9
...
家人们移动端好像真的招不到人
1797
10
...
网易互娱
1728
正在热议
#
牛客帮帮团来啦!有问必答
#
1331493次浏览
18701人参与
#
非技术岗薪资爆料
#
53705次浏览
730人参与
#
不去互联网可以去金融科技
#
47738次浏览
508人参与
#
和牛牛一起刷题打卡
#
45507次浏览
3590人参与
#
产品每日一题
#
1974次浏览
98人参与
#
来聊聊你目前的求职进展
#
230311次浏览
2915人参与
#
OPPO开奖
#
59307次浏览
855人参与
#
晒一晒我的offer
#
4036001次浏览
60421人参与
#
写简历别走弯路
#
360715次浏览
4542人参与
#
硬件兄弟们 甩出你的华为奖状
#
38098次浏览
224人参与
#
软件开发2024笔面经
#
1571947次浏览
36092人参与
#
如果可以选,你最想从事什么工作
#
220511次浏览
3405人参与
#
华子oc时间线
#
11458次浏览
60人参与
#
互联网公司评价
#
106207次浏览
1377人参与
#
参加过提前批的机械人,你们还参加秋招么
#
16858次浏览
383人参与
#
我想象的工作vs实际工作
#
117290次浏览
1811人参与
#
百度工作体验
#
32193次浏览
316人参与
#
机械制造笔面经
#
12582次浏览
343人参与
#
24届软开秋招面试经验大赏
#
1241256次浏览
18682人参与
#
如何写一份好简历
#
342647次浏览
4763人参与
#
滴!实习打卡
#
292998次浏览
4299人参与
#
我的成功项目解析
#
102118次浏览
2844人参与
牛客网
牛客企业服务