Java反射

Java的反射机制十分强大,可以在访问已经已经装载到JVM中的Java对象的描述。可以实现访问,修改对象本身的信息功能,使用反射操作属性,普通方法,构造方法,在javaa.lang.reflect包中提供了对反射的支持。(反射一般应用在一些通用性比较高的代码,如一些框架,都是使用反射来是实现的)在框架开发中,都是基于配置文件开发(在配置文件配置类,通过反射可以得到类中的所有内容)

反射原理:

首先需要把java文件 (.java)à编译java文件,编译后得到.class文件->使用JVM把.class通过类加载器加载到内存中-> .class在内存中使用Class类表示。

而使用反射需要得到Class类,得到这个类才可以获取这个类的所有内容。

要获取Class类有三种方法,代码如下

双击类名,右击,选择Copy Qualified name,可快速复制类的真实路径

 

 

 

 

 

使用反射操作构造方法,下面代码是使用forName方法获取Class类。

操作无参数构造方法

操作普通方法,如果是操作私有方法时,需要设置SetAccessibletrue,表示将私有方法设置为可访问的。当操作静态方法时,因为调用静态方法是类名.方法名,所有在使用invoke操作方法时不需要实例,如下面代码中的m1.invoke(null,”静态方法”),可以使用null来表示静态方法

 

 

 

 

 

运行输出(可以看到分别输出2,3,4)表示第一次调用传过来2个参数,第二次三个。。。。。。。。

 

操作成员变量

在这里如果操作的私有成员变量的话,也需要将setAccessible设置为true,否则会抛一个java.lang.IlleglalAccessException的异常,如下,表示不能访问类的成员,因为修饰语为private

 

 

运行输出如下结果

要使用反射,无论是操作方法还是成员变量等,都需要先获取Class类,使用反射可以破坏单例模式,想要深入理解反射,最好能够了解透切反射的原理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值