Java第五次博客作业:揭开 Java 反射机制的秘密面纱,让码“动”起来

[复制链接]
发表于 昨天 21:45 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
平常我们写代码是“静态”的,编译时就知道要用哪个类;而反射答应我们在“运行时”才去决定用哪个类、调用哪个方法。本日这篇随笔,将拆解这个 Java 高级特性的焦点逻辑。

  • 什么是反射?为什么须要它?
在传统的编程模式中,如果我们想使用一个对象,必须先知道它的类名,然后 new 出来。
但是,如果须要根据用户的设置文件来决定加载什么类,这时间你就没法在代码里写死new XXX()  了。
反射机制就是为了办理这个标题而生的。它答应步伐在运行状态中:
对于恣意一个类,都可以大概知道这个类的全部属性和方法;
对于恣意一个对象,都可以大概调用它的恣意一个方法和属性。
这种动态获取信息以及动态调用对象方法的功能,就是 Java 语言的反射机制。

  • 反射的三大焦点入口
要实现反射,我们起首须要拿到类的“身份证”——也就是  Class  对象。获取它通常有三种方式:
类名.class:最安全、性能最好,得当在编译期就知道类名的环境。
Class clazz = User.class;
对象.getClass():通过已经实例化的对象反向获取类信息。
User user = new User();
Class clazz = user.getClass();
Class.forName("全限定类名"):这是反射最常用的方式。只须要一个字符串就能找到类,非常得当共同设置文件使用。
Class clazz = Class.forName("com.example.User");

  • 反射能做什么?
动态创建对象:不须要  new  关键字,直接通过 clazz.newInstance()  或构造器天生实例。
访问私有成员:这是反射最“霸道”的地方。通过  field.setAccessible(true) ,我们可以强行访问以致修改类中的 private 变量。这在单元测试中非常有用。
动态调用方法:通过  method.invoke(obj, args) ,我们可以在运行时决定调用哪个方法,传入什么参数。

  • 反射的代价
固然反射很强大,但也不能滥用。由于它有两个显着的缺点:
性能开销:反射涉及动态分析,JVM 无法对这些代码举行优化(如内联缓存),以是实验速率比直接调用要慢很多。
安全隐患:它能粉碎封装性(访问私有变量),如果不警惕,大概会绕过安全查抄,导致体系毛病。

  • 总结与思考
通过这次作业,我深刻明确了为什么 Spring、MyBatis 等主流框架都离不开反射。它们是构建“通用性”和“机动性”的基石。

免责声明:如果侵犯了您的权益,请联系站长及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金.
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表