理解Java中的反射机制


了解反射机制,我们就是要理解几个问题:

  • 为什么需要反射
  • 反射的概念
  • 反射的应用

为什么需要反射

这里我们考虑一个情景,那就是,当你有两套以上代码适用于两种不同的生产环境,针对特定的某一种环境下,你需要选择对应的代码,那么这个时候我们是需要每次都修改main函数里的代码,重新编译发布吗?

这个问题的答案是显然的,这样不行。因为java作为一个静态语言,需要对代码先编译再解释执行,而不能动态修改源码,所以设计者就提出了反射的概念,用来解决代码动态设计的问题。

反射的概念

反射就是把Java类中的各个成分映射成一个个的Java对象

即在运行状态中:
1、对于任意一个类,都能够知道这个类的所有属性和方法;
2、对于任意一个对象,都能够调用它的任意一个属性和方法。
这种动态获取信息以及动态调用对象方法的功能叫Java的反射机制。

原理

想要了解反射的基本原理,我们需要了解java程序的运行方式。
1、.java文件通过javac命令编译成.class文件
2、.class文件送入java虚拟机解释运行
java虚拟机模型
在解释运行的过程中,又包括.class文件的类加载,加载到类元数据区,然后每次使用new实例化一个对象时,jvm就会返回一个引用,这个引用首先指向在类元数据区的类,而这个类不能直接被使用,会指向一个堆上的类元数据的副本。
这个时候,通过类名来获得其类元数据等信息,就像是光在镜子之间反射获取,故起名为反射机制。

主要功能

  • 动态获取数据
    我们上面的例子就是动态获取信息,通过配置文件+反射机制的方式,完成程序一次编译之后在多种生产环境下运行的情况。
  • 动态调用对象
    这个是指,在某些时候,对象的一些私有private方法和属性,没有办法显式获得,但是我们可以通过反射的机制,暴力获取。

反射的应用

Java基础技术中的代理、注解都是依托反射才能得以实现并应用广泛,另外我们常用的Spring、myBatis等技术框架也都是依托反射才能得以实现。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值