当前位置: 首页 > news >正文

Java 反射

Java的反射功能,可以帮我们在程序“运行期间““自由的”创建对象,那为什么强调运行期间呢?那是因为我们创建对象一般是在编译期间就创建好了,例如:我们在代码中new了一个对象,这个时候java源码文件转换成字节码文件后,对象就创建好了,只不过是在JVM上跑的时候,加载进来而已

那自由体现在哪里呢?自由体现在我们加载某个对象时不再用去像new这样去硬编码了,我们可以通过Class.ForName("类路经").newInstance方法,构造出这个对象,而这个类路经我们可以通过加载配置文件或者从数据库中获取的方式拿到,这样我们就不用通过改代码的方式,加载不同的对象了

Java的反射功能在java.lang.reflect包中,Class类是reflect包中一个重要类的,用于表示对象的类型标识,JVM会为每一个Java对象,创建一个这样的类,通过这个类,我们可以获取对象所属类的成员变量,对java对象的属性进行动态修改,例如Field[] f=具体类.getDeclaredFields();f[0].set("具体值")

正是由于java的反射功能可以让我们在运行期间灵活的创建对象,那么创建对象与使用对象的解耦,及创建平台型框架就成为了可能,例如我们现在常用的Spring框架在加载对象时都采用了反射,例如我们编写spring bean的配置文件,在里面罗列了类的全路径名,那么在spring项目启动时,加载这配置文件,读取里面类的全路径名,然后利用java反射生成实例对象,放到IOC容器(其实就是一个hashmap)里面

Java进行反射的前提是存在相应的class字节码文件,如果没有class文件只有源码文件也是可以动态加载的,这个就要通过java.tools包里的Compiler类的run方法了,这是JDK6推出的方法,例如我们见到一些在线编程环境,就采用了这样的技术

http://www.hskmm.com/?act=detail&tid=39313

相关文章:

  • Java 语法糖
  • Java 代理
  • 纸笔群群友命题乱做
  • 本人对KMP如何匹配到所有结果的算法存在一些疑惑...
  • 字符与Java国际化编程
  • 进程与线程
  • 解决 Windows 下 Claude 通过 cmd/powershell 运行出错失去响应的问题
  • # Ubuntu 根目录空间扩展操作手册(基于 RAID 关联磁盘 /dev/sdb2)
  • 25.10.25随笔NOIP模拟赛总结
  • 013的加密世界权威指南_第二部分
  • Perplexity Comet AI浏览器「等待网络链接」解决方案
  • Redis 持久化 内存模型 - 指南
  • 新地球
  • 2025 年 10 月商用厨房设备,酒店厨房设备,大型厨房设备厂家最新推荐,聚焦高端定制需求与全案交付能力
  • zr模拟赛day8T2
  • 251026
  • 2025 年 10 月食堂厨房设备厂家最新推荐,聚焦资质、案例、售后的食堂场景深度解读
  • embedding
  • 2025 年 10 月不锈钢厨房设备厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 年 10 月餐饮厨房设备厂家最新推荐,实力品牌深度解析采购无忧之选!
  • DINO版本进化
  • 基于深度学习神经网络协同过滤模型(NCF)的视频推荐体系
  • sometime some time sometimes
  • 关于容斥原理
  • 可变字符串
  • 欧拉定理
  • 给安卓设置背景色的时候保持默认按钮样式(关于使用setBackgroundColor导致丢失默认按钮样式的问题)
  • 分片上传与断点续传实现详解
  • 2025 年 10 月展示柜厂家最新推荐,技术实力与市场口碑深度解析!
  • 手把手在 Linux 上安装 Docker 与 Docker Compose(包含 Ubuntu、CentOS 等 11 个发行版)