文档

Java™教程

教程:反射API

反射的用途

反射通常被需要在Java虚拟机中运行的应用程序使用,这些应用程序需要能够检查或修改运行时行为。这是一个相对高级的功能,应该只由对语言基础有很好掌握的开发人员使用。尽管如此,反射是一种强大的技术,可以使应用程序执行其他情况下不可能的操作。

可扩展性特性
应用程序可以通过使用完全限定名称创建可扩展性对象的实例来使用外部用户定义的类。
类浏览器和可视化开发环境
类浏览器需要能够枚举类的成员。可视化开发环境可以利用反射中可用的类型信息来帮助开发人员编写正确的代码。
调试器和测试工具
调试器需要能够检查类的私有成员。测试工具可以利用反射来系统地调用类上定义的一组可发现的API,以确保测试套件中的代码覆盖率较高。

反射的缺点

反射功能强大,但不应盲目使用。如果可以在不使用反射的情况下执行操作,则最好避免使用反射。在通过反射访问代码时应注意以下问题。

性能开销
由于反射涉及动态解析的类型,某些Java虚拟机优化无法执行。因此,反射操作的性能比非反射操作慢,并且应避免在性能敏感的应用程序中经常调用的代码段中使用反射。
安全限制
反射需要运行时权限,在运行在安全管理器下时可能不存在该权限。对于必须在受限安全上下文中运行的代码(例如Applet),这是一个重要的考虑因素。
暴露内部细节
由于反射允许代码执行在非反射代码中非法的操作,例如访问private字段和方法,使用反射可能导致意外的副作用,可能使代码无法正常工作并破坏可移植性。反射代码打破了抽象,因此在平台升级时可能会改变行为。

教程课程

本教程介绍了使用反射访问和操作类、字段、方法和构造函数的常见用法。每个课程都包含代码示例、提示和故障排除信息。

trail icon
本课程展示了获取 Class 对象的各种方法,并使用它来检查类的属性,包括其声明和内容。
trail icon 成员
本课程介绍了如何使用反射 API 来查找类的字段、方法和构造函数。提供了设置和获取字段值、调用方法以及使用特定构造函数创建对象实例的示例。
trail icon 数组和枚举类型
本课程介绍了两种特殊类型的类:在运行时生成的数组和定义唯一命名对象实例的 enum 类型。示例代码演示了如何获取数组的组件类型以及如何设置和获取数组或 enum 类型的字段。

注意: 

本教程中的示例是为了实验反射 API 而设计的。因此,异常的处理方式与生产代码中的方式不同。特别是,在生产代码中,不建议将可见于用户的堆栈跟踪信息输出。



上一页:教程开始
下一页: