java中的反射 1—— 简介@译自Oracle官方文档

反射API的使用

反射通常被用在需要检查或修改其他运行在JVM中的程序的运行时行为的程序中。这是一种高级特性所以只建议对Java语言基础有深刻理解的开发人员使用。请牢记这个忠告,反射是一种强大的技术,它使得程序可以完成用其他手段不可能完成的任务。

可扩展性
程序可以通过使用类的完全限定名称( fully-qualified name)创建可扩展对象的实例来使用外部的或用户自定义的类。
类浏览器( Class Browser)和可视化开发环境
类浏览器需要有能力枚举类的数目。可视化开发环境可以借助使用反射获取到的类型信息帮助开发人员写出正确的代码
调试器(Debuggers)和测试工具
调试器需要有能力检查类中的私有(private)成员。自动化测试框架可以使用反射有组织地调用一个类的API以保证在测试中受测试代码被全面覆盖。

反射的缺点

反射是强大的,但却不应该随意使用。如果可以不使用反射而达到同样的效果那就不要用反射。使用反射时以下几点需牢记于心。

浪费性能
因为反射参与了动态处理的类型,所以JVM的一些优化措施会失效。所造成的后果便是,反射操作比不用反射的情况会有较差的性能,因此在对性能有要求的代码中应尽量避免使用。
安全性受限
反射需要运行时权限所以不能运行在安全管理器( security manager)下。这在对运行环境安全有较高要求时,比如Applet,尤其需要注意。
暴露内部结构
由于反射允许执行一些在不使用反射时会被视为非法(illeagal)的操作,比如访问私有(private)成员和方法,所以使用反射会造成意想不到的副作用(sede-effects),可能会造成代码功能异常或者丧失可移植性。反射会破坏代码的抽象(abstraction)因此使用了反射的代码可能会在系统升级后表现异常。

详细示例

示例涵盖了使用反射访问和操作类、字段、方法和构造方法的常见用法。每个部分都有示例代码、提醒和常见问题的分析。


这部分展示了获取一个Class对象的多种方式以及用该对象对类的各项属性进行检查,包括声明和内容。

成员
这部分展示了如何使用反射API找出一个类的字段、方法和构造方法。例子涵盖了字段值的设置和获取,方法的调用以及使特定的构造方法创建对象的新实例。

数组和枚举类型
这部分介绍了两种特别的类:在运行时产生的数组,以及定义了唯一对象名实例的枚举类型。示例代码展示了如何获取一个数组的元素类型以及如何设置和获得数组或枚举类型中的字段。

注意:
示例代码仅供学习反射API使用。因此对异常的处理与实际生产中的代码是不同的。尤其是在实际工作中不应该让用户看到异常抛出的路径。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值