Java反射理解

在众多的博客中,java反射号称Java框架的灵魂;本文笔记记录,Java反射的理解与Java反射的一些应用。

理解Java反射中的Class对象

理解Java反射,首先理解java由字符串的代码变成一个执行程序的过程。
比如我写了一个 Person.java 字符串的代码文件,进行编译产生 Person.class java的字节码文件。
要想使用Person,需要产生一个对象。产生一个对象需要粗略理解有三个大步骤,

  • 第一步源码编译阶段,将文本代码编译出xxx.class字节码文件;
  • 第二个阶段Class类对象阶段,将字节码文件加载到内存后产生其对应的Class类对象且xxx.class字节码在一次运行过程中,只会被加载一次到内存中,不论通过何种方式获取改类的字节码都是同一个Class类对象
  • 第三个阶段Runtime运行时阶段。
    在这里插入图片描述

如上图,通过类加载器ClassLoader,将Person.class文件加载到内存中。在加载到内存中会产生一个对应的Class对象。
这里需要特别注意:每个类通过类加载器加载到内存中时,会产生一个Class对象Class对象new Person()不同,new Person()产生一个对象新开辟一块内存,不对Person对应的Class对象有影响。而字节码Person.class加入内存的时,就产生一个Class对象与之绑定。
所以Person类新建不同对象,对象之间不相同的,而这些不同的对象对应的却是相同一个Class对象。如下图p1与p2不同,p1对象的Class类对象与p2的类对象是一个Class类对象。
在这里插入图片描述

反射应用

理解Class类对象,后面再解释Java反射就很容易理解了。因为Java反射的功能展现就在Class类对象。Java完成文本字符串代码编写后,需要进行编译成诸如Person.class字节码文件。Person.class字节码文件会有三部分内容,属性集合,构造方法集合,方法集合。加载到内存后产生的Class类对象,如下图将属性,构造方法,方法集合分别为Field对象,Constructor对象,Method对象;这就是反射机制。
在这里插入图片描述
获取Class类对象方式

  • Class.forname("全限定名"); 将字节码加载到内存并初始化,返回Class类对象。
  • 通过 类名.class 获取Class类对象,这种方式一般都用在形参的传参中。
  • 比如Person已经new一个对象后,想要获取其对应的Class类对象,通过对象.getClass()可获得Class类对象。

Class类对象功能
这些功能在理解后都是一些使用简单,关键在于应用,功能如下:

  • 获取成员变量,诸如此类方式Person.class.getField()
  • 获取构造方法
  • 获取成员方法,获取注解列表
根据动态代理模式理解反射的应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值