反射(二)什么是反射

简介: 反射(二)什么是反射

什么是反射

反射是指对于任何一个类,在"运行的时候"都可以直接得到这个类全部成分

  • 构造器对象:Constructor
  • 成员变量对象:Field
  • 成员方法对象:Method

核心思想:在运行时获取类编译后的字节码文件对象,然后解析类中的全部成分

反射提供了一个 Class 类型:HelloWorld.java → javac → HelloWorld.class

  • Class c = HelloWorld.class

注意:反射是工作在运行时的技术,只有运行之后才会有 class 类对象

作用:可以在运行时得到一个类的全部成分然后操作,破坏封装性,也可以破坏泛型的约束性。

反射的优点:

  • 可扩展性:应用程序可以利用全限定名创建可扩展对象的实例,来使用来自外部的用户自定义类
  • 类浏览器和可视化开发环境:一个类浏览器需要可以枚举类的成员,可视化开发环境(如 IDE)可以从利用反射中可用的类型信息中受益,以帮助程序员编写正确的代码
  • 调试器和测试工具: 调试器需要能够检查一个类里的私有成员,测试工具可以利用反射来自动地调用类里定义的可被发现的 API 定义,以确保一组测试中有较高的代码覆盖率

反射的缺点:

  • 性能开销:反射涉及了动态类型的解析,所以 JVM 无法对这些代码进行优化,反射操作的效率要比那些非射操作低得多,应该避免在经常被执行的代码或对性能要求很高的程序中使用反射
  • 安全限制:使用反射技术要求程序必须在一个没有安全限制的环境中运行,如果一个程序必须在有安全限制的环境中运行
  • 内部暴露:由于反射允许代码执行一些在正常情况下不被允许的操作(比如访问私有的属性和方法),所以使用反射可能会导致意料之外的副作用,这可能导致代码功能失调并破坏可移植性。反射代码破坏了抽象性,因此当平台发生改变的时候,代码的行为就有可能也随着变化
目录
打赏
0
0
0
0
0
分享
相关文章
Vue 的每个列表项(item)是干什么的?底层原理是什么?
Vue 的每个列表项(item)是干什么的?底层原理是什么?
400 0
构建高效自动化运维体系:基于Docker和Kubernetes的实践
【5月更文挑战第30天】 在当今的快速迭代和持续部署的软件发布环境中,自动化运维的重要性愈发凸显。本文旨在探讨如何利用容器化技术与微服务架构,特别是Docker和Kubernetes,来构建一个高效、可伸缩且自愈的自动化运维体系。通过详细分析容器化的优势及Kubernetes的集群管理机制,文章将提供一个清晰的指南,帮助读者理解并实现现代软件部署的最佳实践。
MySQL专题系统归纳快速上手(常用cmd命令,常用函数汇总,SQL语句精讲带示例)适用初学、用法速查(一)
MySQL专题系统归纳快速上手(常用cmd命令,常用函数汇总,SQL语句精讲带示例)适用初学、用法速查(一)
272 0
如何设置代理ip服务器地址
如何设置代理ip服务器地址
162 0
SpringBoot - @ConfigurationProperties 注解使用姿势,这一篇就够了(三)
SpringBoot - @ConfigurationProperties 注解使用姿势,这一篇就够了(三)
206 0
SpringBoot - @ConfigurationProperties 注解使用姿势,这一篇就够了(三)
看完这篇 教你玩转渗透测试靶机vulnhub—DarkHole2
看完这篇 教你玩转渗透测试靶机vulnhub—DarkHole2
321 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等