java中的反射 1—— 简介@译自Oracle官方文档
来源:互联网 发布:http user agent php 编辑:程序博客网 时间:2024/06/06 02:10
译自:http://docs.oracle.com/javase/tutorial/reflect/index.html
反射API的使用
反射通常被用在需要检查或修改其他运行在JVM中的程序的运行时行为的程序中。这是一种高级特性所以只建议对Java语言基础有深刻理解的开发人员使用。请牢记这个忠告,反射是一种强大的技术,它使得程序可以完成用其他手段不可能完成的任务。
- 可扩展性
- 程序可以通过使用类的完全限定名称(fully-qualified name)创建可扩展对象的实例来使用外部的或用户自定义的类。
- 类浏览器(Class Browser)和可视化开发环境
- 类浏览器需要有能力枚举类的数目。可视化开发环境可以借助使用反射获取到的类型信息帮助开发人员写出正确的代码
- 调试器(Debuggers)和测试工具
- 调试器需要有能力检查类中的私有(private)成员。自动化测试框架可以使用反射有组织地调用一个类的API以保证在测试中受测试代码被全面覆盖。
反射的缺点
反射是强大的,但却不应该随意使用。如果可以不使用反射而达到同样的效果那就不要用反射。使用反射时以下几点需牢记于心。
- 浪费性能
- 因为反射参与了动态处理的类型,所以JVM的一些优化措施会失效。所造成的后果便是,反射操作比不用反射的情况会有较差的性能,因此在对性能有要求的代码中应尽量避免使用。
- 安全性受限
- 反射需要运行时权限所以不能运行在安全管理器(security manager)下。这在对运行环境安全有较高要求时,比如Applet,尤其需要注意。
- 暴露内部结构
- 由于反射允许执行一些在不使用反射时会被视为非法(illeagal)的操作,比如访问私有(private)成员和方法,所以使用反射会造成意想不到的副作用(sede-effects),可能会造成代码功能异常或者丧失可移植性。反射会破坏代码的抽象(abstraction)因此使用了反射的代码可能会在系统升级后表现异常。
详细示例
示例涵盖了使用反射访问和操作类、字段、方法和构造方法的常见用法。每个部分都有示例代码、提醒和常见问题的分析。
- 类
- 这部分展示了获取一个Class对象的多种方式以及用该对象对类的各项属性进行检查,包括声明和内容。
- 成员
- 这部分展示了如何使用反射API找出一个类的字段、方法和构造方法。例子涵盖了字段值的设置和获取,方法的调用以及使特定的构造方法创建对象的新实例。
- 数组和枚举类型
- 这部分介绍了两种特别的类:在运行时产生的数组,以及定义了唯一对象名实例的枚举类型。示例代码展示了如何获取一个数组的元素类型以及如何设置和获得数组或枚举类型中的字段。
注意:
0 0
- java中的反射 1—— 简介@译自Oracle官方文档
- java中的反射 2.4——类:常见问题@译自Oracle官方文档
- java中的反射 2.3——类:发现类成员@译自Oracle官方文档
- java中的反射 2.1——类:获取类对象@译自Oracle官方文档
- java中的反射 2.0—— 类@译自Oracle官方文档
- java中的反射 2.2——类:检查一个类的声明信息@译自Oracle官方文档
- Android中的Menu的简介(翻译自官方文档)——————个人笔记
- Android中的ActionBar的简介(翻译自官方文档)——————个人笔记
- Android中的InputEventsr的简介(翻译自官方文档)——————个人笔记
- Interface RowMapper 简介(译自spring 官方文档)
- Services简介,翻译自官方文档
- Oracle官方文档阅读——Java可变参数
- 【译】TestNG官方文档中文版(01)—— 简介
- Kafka官方文档翻译——简介
- java中的反射简介
- 黑马程序员——Java中的反射的基本简介
- TestNG官方文档中文版(01)—— 简介
- OkHttp中的拦截器使用--翻译自官方文档
- Oracle连接数据库封装类
- Score
- 【iOS开发系列】NSObject方法介绍
- Android Studio关联SVN进行版本控制
- 程序员编程之道之快乐编程好习惯
- java中的反射 1—— 简介@译自Oracle官方文档
- OC学习笔记之self关键字
- 八、使用IKAnalyzer自定义分词字典
- 使用xampp+nat123发布网站
- web前端传值到后台的问题
- shell 文件操作
- TOYS (poj 2381 叉积+二分)
- mysql管理日常命令
- linux串口编程实现---有图有真相