反射API文档

距离面试只剩下两个月的时间,心里慌得很,每次看各种公众号推送的面试经验,觉得还是得深入钻研下基础部分。查阅JDK的文档发现竟然没有中文的,只有网友的谷歌翻译,质量太差,决定按照自己的节奏,将重要的部分自己翻译出来,再结合面经及代码,巩固对java的认识。

反射部分文档的翻译

原文地址:https://docs.oracle.com/javase/tutorial/reflect/index.html

反射的API

反射的用途

反射被广泛的应用于那些需要检测或者修饰运行在JVM上的处于运行期的代码运行状态的项目。该技术相对高级,对该语言的基础有较强理解的开发人员可以考虑使用之。谨记,反射是一个强有力的工具,。。。

扩展性

App(可理解为框架)可以利用反射的扩展性,根据全限定类名来实例化用户自定义的类。

类浏览器和虚拟开发环境

类浏览器(Class Browser)需要能够列举类的成员(参考IDEA)。虚拟开发环境(Visual development environments)可以利用反射获取的可用的类型信息帮助开发人员校正代码。

Debuggers和测试工具

Debuggers需要能够检验类的私有成员变量。测试工具利用反射系统性的调用定义在类上的API集合,来确保测试集合的高代码覆盖度。

反射的弊端

反射虽好,但不能随意使用。能不用反射的地方,最好避免使用。通过反射操作代码时需要谨记下边的隐患。

性能考量

因为反射包含动态解析的类型(运行期就可获取),相当部分的JVM优化操作不能执行。因此,反射操作相较于非反射的对照组,运行更慢,对性能较敏感的App频繁的调用的部分代码尽量避免使用反射。

安全限制

反射需要运行期的权限,其在安全管理器(Security Manager)下运行时不被准许。对于必须运行在受限的安全上下文(security context)中的代码例如Applet,这是一个很重要的考虑因素

内部的暴露

因为反射允许代码执行那些在非反射代码中非法的操作,例如访问私有属性和方法,因此使用反射会导致意外的副作用,可能导致代码功能部分丧失,破坏可移植性。反射的代码打破了抽取(abstractions),因此可能在平台升级时改变性能。

猜你喜欢

转载自blog.csdn.net/wjl31802/article/details/89577758