Java中的反射及优缺点

Java中的反射及优缺点,第1张

Java中的反射及优缺点 1.什么是反射?

每个类都有一个 Class 对象,包含了与类有关的信息。
当编译一个新类时,会产生一个同名的 .class 文件,该文件内容保存着 Class 对象。
加载相当于 Class 对象的加载,类在第一次使用时才动态加载到 JVM 中。
也可以使用 Class.forName(“com.mysql.jdbc.Driver”) 这种方式来控制类的加载,该方法会返回一个
Class 对象。
反射可以提供运行时的类信息,并且这个类可以在运行时才加载进来,甚至在编译时期该类的 .class 不存在也可以加载进来。

Class 和 java.lang.reflect 一起对反射提供了支持,java.lang.reflect 类库主要包含了了以下三个类:

  • Field :可以使用 get() 和 set() 方法读取和修改 Field 对象关联的字段;
  • Method :可以使用 invoke() 方法调用与 Method 对象关联的方法;
  • Constructor :可以用 Constructor 创建新的对象。

应用举例:工厂模式,使用反射机制,根据全限定类名获得某个类的 Class 实例。

2.反射的优缺点 (1)优点

运行期类型的判断; Class.forName() 动态加载类;提高高代码的灵活度.

(2)缺点

性能开销:反射涉及了动态类型的解析,所以 JVM无法对这些代码进行优化。因此,反射 *** 作的效率要比那些非反射 *** 作低得多。我们应该避免在经常被执行的代码或对性能要求很高的程序中使用反射。
安全限制 :使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有安全限制的环境中运行,如 Applet,那么这就是个问题了。
内部暴露:由于反射允许代码执行一些在正常情况下不被允许的 *** 作(比如:访问私有的属性和方法),所以使用反射可能会导致意料料之外的副作用,这可能导致代码功能失调并破坏可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。

尽管反射非常强大,但也不能滥用。如果一个功能可以不用反射完成,那么最好就不用。在我们使用反射技术时,下面几条内容应该牢记于心。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5077736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-16
下一篇 2022-11-16

发表评论

登录后才能评论

评论列表(0条)

保存