java基础--反射
1 java中反射是什么意思,有哪些应用场景
- 每个类都有一个class对象,包含了与该类有关的信息。当编译一个新类时,会产生一个同名的.class文件,该文件内容保存着Class对象。类加载相当于Class对象的加载,类在第一次使用时才动态加载到JVM中。
- 反射可以提供运行时的类信息,并且该类可以在运行时才加载进来,甚至在编译时期该类的.class不存在也可以加载进来。Class和java.lang.reflect一起对反射提供了支持,java.lang.reflect类库主要包含了以下三个类:
- Field:Field对象关联的字段
- Method:Method对象关联的方法
- Constructor:可以用Constructor创建新的对象
- 应用举例:工厂模式
2 反射优缺点
- 优点:运行期类型判断,提高代码的灵活度
- 缺点:尽管反射非常强大,但也不能滥用。如果一个功能可以不用反射来完成,最好不要使用。使用反射时需要考虑以下几点:
- 性能开销:反射涉及了动态类型的解析,所以JVM无法对这些代码进行优化。因此,反射操作的效率要比非反射操作低的多。应该避免在经常被执行的代码或对性能要求很高的程序中使用反射
- 安全限制:使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如Applet,那么这就是一个问题
- 内部暴露:由于反射允许代码执行一些在正常情况下不被允许的操作,比如访问私有属性和方法,所以使用反射可能会导致意料之外的副作用,这可能导致代码功能失调并破坏可移植性。反射代码破坏了抽象性,因此,当平台发生改变的时候,代码的行为就有可能随之改变