auto commit

This commit is contained in:
CyC2018 2020-11-18 03:04:56 +08:00
parent 0c65b30a8f
commit 36977963ca

View File

@ -1354,27 +1354,25 @@ public static void main(String[] args) {
Class java.lang.reflect 一起对反射提供了支持java.lang.reflect 类库主要包含了以下三个类
- **Field** 可以使用 get() set() 方法读取和修改 Field 对象关联的字段
- **Method** 可以使用 invoke() 方法调用与 Method 对象关联的方法
- **Constructor** 可以用 Constructor newInstance() 创建新的对象
- **Field** 可以使用 get() set() 方法读取和修改 Field 对象关联的字段
- **Method** 可以使用 invoke() 方法调用与 Method 对象关联的方法
- **Constructor** 可以用 Constructor newInstance() 创建新的对象
**反射的优点**
- **可扩展性** 应用程序可以利用全限定名创建可扩展对象的实例来使用来自外部的用户自定义类
- **类浏览器和可视化开发环境** 一个类浏览器需要可以枚举类的成员可视化开发环境 IDE可以从利用反射中可用的类型信息中受益以帮助程序员编写正确的代码
- **调试器和测试工具** 调试器需要能够检查一个类里的私有成员测试工具可以利用反射来自动地调用类里定义的可被发现的 API 定义以确保一组测试中有较高的代码覆盖率
- **可扩展性** 应用程序可以利用全限定名创建可扩展对象的实例来使用来自外部的用户自定义类
- **类浏览器和可视化开发环境** 一个类浏览器需要可以枚举类的成员可视化开发环境 IDE可以从利用反射中可用的类型信息中受益以帮助程序员编写正确的代码
- **调试器和测试工具** 调试器需要能够检查一个类里的私有成员测试工具可以利用反射来自动地调用类里定义的可被发现的 API 定义以确保一组测试中有较高的代码覆盖率
**反射的缺点**
尽管反射非常强大但也不能滥用如果一个功能可以不用反射完成那么最好就不用在我们使用反射技术时下面几条内容应该牢记于心
- **性能开销** 反射涉及了动态类型的解析所以 JVM 无法对这些代码进行优化因此反射操作的效率要比那些非反射操作低得多我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射
- **性能开销** 反射涉及了动态类型的解析所以 JVM 无法对这些代码进行优化因此反射操作的效率要比那些非反射操作低得多我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射
- **安全限制** 使用反射技术要求程序必须在一个没有安全限制的环境中运行如果一个程序必须在有安全限制的环境中运行 Applet那么这就是个问题了
- **安全限制** 使用反射技术要求程序必须在一个没有安全限制的环境中运行如果一个程序必须在有安全限制的环境中运行 Applet那么这就是个问题了
- **内部暴露** 由于反射允许代码执行一些在正常情况下不被允许的操作比如访问私有的属性和方法所以使用反射可能会导致意料之外的副作用这可能导致代码功能失调并破坏可移植性反射代码破坏了抽象性因此当平台发生改变的时候代码的行为就有可能也随着变化
- **内部暴露** 由于反射允许代码执行一些在正常情况下不被允许的操作比如访问私有的属性和方法所以使用反射可能会导致意料之外的副作用这可能导致代码功能失调并破坏可移植性反射代码破坏了抽象性因此当平台发生改变的时候代码的行为就有可能也随着变化
- **内部暴露** 由于反射允许代码执行一些在正常情况下不被允许的操作比如访问私有的属性和方法所以使用反射可能会导致意料之外的副作用这可能导致代码功能失调并破坏可移植性反射代码破坏了抽象性因此当平台发生改变的时候代码的行为就有可能也随着变化
- [Trail: The Reflection API](https://docs.oracle.com/javase/tutorial/reflect/index.html)
- [深入解析 Java 反射1- 基础](http://www.sczyh30.com/posts/Java/java-reflection-1/)