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.

由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方

法),所以使用反射可能会导致意料之外的副作用--代码有功能上的错误,降低可移植性。

反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化。

java 反射机制性能_Java反射机制的用途和缺点相关推荐

  1. java反射的性能_java反射的性能问题

    java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考. 测试背景: 1. 测试简单Bean(int,Integer,String)的set方法 2. loop 1亿次 3. 测试代码尽 ...

  2. java 反射 工厂模式_Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)-反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  3. java反射的原理_java反射机制的实现原理

    java反射机制的实现原理 反射机制: 所谓的反射机制就是java语言在运行时拥有一项自观的能力. 通过这种能力可以彻底的了解自身的情况为下一步的动作做准备. 下面具体介绍一下java的反射机制.这里 ...

  4. java 提高反射性能_java反射性能

    项目中用到了java的反射,可以大大减少代码量.但是反射的性能却不容乐观,做了个简单的测试,如下. public void noreflect() { Person p = new Person(); ...

  5. java 反射为何耗性能_Java反射的性能成本

    在Java中,普遍认为java.reflect API的性能代价很高.旧的Java版本有巨大的性能开销,而新版本似乎使其处于可接受的范围内.但"可接受"到底是什么意思呢? 这是我在 ...

  6. java反射源码_java反射技术详解附源码

    在学校学习Java时,由于学的不扎实,也没经历过太多实战项目,所以很多重要的知识点瞟一眼就过去了,比如现在要讲的反射,当时直接就忽略掉了,可现在发现很多地方需要反射,不得不重新学习一下,上学欠了太多债 ...

  7. java反射随意值_Java反射总结

    能够分析类能力的程序称为反射.对于给定的Java类名,可以通过反射获取类的信息.将类的各成分映射出相应的Java类. Class类 在程序运行期间,Java运行时系统始终对所有的对象维护一个被称为运行 ...

  8. java技术详解_Java反射技术详解及实例解析

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...

  9. java反射最佳实践_Java 反射最佳实践 – 码农网

    标签: 概要:最简单优雅的使用反射. 本文的例子都可以在示例代码中看到并下载,如果喜欢请star,如果觉得有纰漏请提交issue,如果你有更好的点子可以提交pull request.本文的示例代码主要 ...

最新文章

  1. python——元素列表基础
  2. 有关RSA 命令总结
  3. JavaScript的时钟小程序
  4. Sencha-概念-Events(事件)(官网文档翻译10)
  5. 什么是ABAP的STATE_READ_ACCESS
  6. css的再深入7(更新中···)
  7. java await signal_【Java并发008】原理层面:ReentrantLock中 await()、signal()/signalAll()全解析...
  8. Bailian2717 基本数据类型【字符串匹配】
  9. 设系统中有三种类型的资源(A,B,C)的五个进程(P1,P2,P3,P4,P5)。A资源的数量为17,B资源的数量为5,C资源的数量为20。在T0时刻系统状态如表所示。
  10. 阶段3 2.Spring_09.JdbcTemplate的基本使用_2 JdbcTemplate的概述和入门
  11. 整人VBS\BAT代码 ② 整蛊系列→可参考
  12. nexus安装过程中遇到的一些问题
  13. Ps和Sai文件自动保存,自动备份
  14. 2022Vue经典面试题及答案汇总(持续更新)
  15. java excel 创建控件_Java 添加、删除Excel表单控件
  16. 3580整数配对---20210527
  17. 上周热点回顾(7.4-7.10)
  18. c语言报数问题程序,转圈报数问题(C语言):有n个人围成一圈,顺序排号……...
  19. 获投5亿元E轮融资,百分点能否成为数据+AI领域的独角兽?
  20. H264视频压缩算法

热门文章

  1. Postman安装与使用(网络请求神器)--post、get请求
  2. Liunx 命令大全
  3. Python应用实战-Python提升运行速度技巧总结
  4. 少儿编程150讲轻松学Scratch(三)-关卡类游戏《鱼塘》
  5. java flux api,SpringBoot学习系列-WebFlux REST API 全局异常处理
  6. 中断按键c语言程序设计,单片机C语言代码:外部中断,按下中断按键LED不亮,LED1正常亮...
  7. 孙叫兽进阶之路之Gitlab的使用(图文教程)
  8. Linux光盘检测,qpxtool
  9. JS基础:求一组数中的最大最小值,以及所在位置
  10. vue命令行错误处理