当前位置:首页 > Java技术 > Java 反射机制的用途和缺点

Java 反射机制的用途和缺点

2022年08月05日 21:26:42Java技术2

Java反射机制的用途和缺点

反射的用途 Uses of Reflection

Reflection is commonly used by programs which require the ability to examine or modify the
runtime behavior of applications running in the Java virtual machine. This is a relatively advanced
feature and should be used only by developers who have a strong grasp of the fundamentals of the language. With that caveat in mind, reflection is a powerful technique and can enable applications to perform operations which would otherwise be impossible.

反射被广泛地用于那些需要在运行时检测或修改程序行为的程序中。这是一个相对高级
的特性,只有那些语言基础非常扎实的开发者才应该使用它。如果能把这句警示时刻放在心
里,那么反射机制就会成为一项强大的技术,可以让应用程序做一些几乎不可能做到的事情。

反射的缺点 Drawbacks of Reflection

Reflection is powerful, but should not be used indiscriminately. If it is possible to perform an
operation without using reflection, then it is preferable to avoid using it. The following concerns
should be kept in mind when accessing code via reflection.

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

  1. 性能第一 Performance Overhead

    Because reflection involves types that are dynamically resolved, certain Java virtual machine
    optimizations can not be performed. Consequently, reflective operations have slower performance
    than their non-reflective counterparts, and should be avoided in sections of code which are called
    frequently in performance-sensitive applications.

    反射包括了一些动态类型,所以 JVM 无法对这些代码进行优化。因此,反射操作的效
    率要比那些非反射操作低得多。我们应该避免在经常被 执行的代码或对性能要求很高的程
    序中使用反射。

  2. 安全限制 Security Restrictions

    Reflection requires a runtime permission which may not be present when running under a
    security manager. This is in an important consideration for code which has to run in a restricted
    security context, such as in an Applet.

    使用反射技术要求程序必须在一个没有安全限制的环境中运行。如果一个程序必须在有
    安全限制的环境中运行,如 Applet,那么这就是个问题了。

  3. 内部暴露 Exposure of Internals

    Since reflection allows code to perform operations that would be illegal in non-reflective
    code, such as accessing private fields and methods, the use of reflection can result in
    unexpected side-effects, which may render code dysfunctional and may destroy portability.
    Reflective code breaks abstractions and therefore may change behavior with upgrades of the
    platform.

    由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方
    法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。
    反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。

作者:Alfredonwr
来源链接:https://blog.csdn.net/cnzl0123/article/details/73459750

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/17966.html

分享给朋友:

“Java 反射机制的用途和缺点” 的相关文章

Java异常处理之InvocationTargetException(反射异常)

 Java异常处理之InvocationTargetException(反射异常)   InvocationTargetException异常由Method.invoke(obj, args...)方法抛出。当被调用的方法的内部抛出了异常而没有被捕获时,...

浅谈Java反射的实现原理

从一段示例代码开始 Class clz = Class.forName("ClassA"); Object instance = clz.newInstance(); Method method =...

JAVA中的反射机制以及在Spring中的应用

文章目录 一 反射机制 二 反射机制的使用-Class类 三 为什么要使用反射 3.1 静态编译 3.2 动态编译 3.3 反射的好处...

利用JAVA反射,读取数据库表名,自动生成对应实体类

本代码是利用java反射,读取数据库表自动根据表名生成实体类,数据库采用老牌SQLSERVER 2000,驱动为JTDS,其他数据库可根据情况自定修改。 代码中包含了大部分数据库类型与JAVA类型的转换,少数未包含进去的会在生成代码时打印出来,方面后期查找修改。 本文...

JAVA利用反射映射JSON对象为JavaBean

关于将JSONObject转换为JavaBean,其实在JSONObject中有对于的toBean()方法来处理,还可以根据给定的JsonConfig来处理一些相应的要求,比如过滤指定的属性 [java] vi...

【译】1. Java反射——引言

【译】1. Java反射——引言

原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov   Java的反射机制使得它可以在运行时检查类、接口、字段、方法,而在编译时并不不知道它们的名称。也可以通过反射...

java反射例子

package reflect; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java...

java反射机制详解

java反射机制详解

一、什么是反射 JAVA反射机制是在运行状态中,对于任何一个类,都能够知道这个类的所有属性和方法;对于任何一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。 想要使用反射机制,就必须要先获取到该类的字节码文件对象(...

java反射的性能问题

java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考.测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能避免对象的创建,复发方法的调用,仅仅测试set方法的耗时测试结果:...

Java反射应用-遍历一个对象的属性和值

本文是Java反射的一个常见的案例,常见的情况是,给到一个对象,需要把对象的每个属性和值重新生成一个Map或者Array,这个时候就是要要到反射啦,不多说,上干货: public static ArrayList<NameValuePair> getObjNam...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。