Java反射学习总结二(用反射调用对象的私有属性和方法)

我们都知道,正常的调用是无法访问对象修改后的属性和方法的,这也是Java的封装原则。

但是有没有办法强制访问对象的修饰属性和方法?那就是使用反射!(这可能会在面试问题中问到)

接下来,让我们看看它是如何实现的:

我们去jdk看一下描述属性的class Field,以及方法的class:

java.lang.

类字段

java.lang.

班级

可以看出这两个类有一个共同的特点,就是都继承自java.lang..类,我们来好好看看这个类的描述

java.lang.

班级

大致意思是:

此类是 Field 和 的超类,它允许反射对象禁用 Java 语言中的访问控制检测。控制检查是 、 () 、 和 。. . 等等等等等等。. .

这里贴出这个控制访问控制检测的方法:(这个类里也有一些相关的方法,有兴趣的可以自己去看看)

public void setAccessible(boolean flag)
                   throws SecurityException

设置

图片[1]-Java反射学习总结二(用反射调用对象的私有属性和方法)-唐朝资源网

为此价值。一个值

那个Java什么时候用的。一个值

那个Java。

大致意思:

设置一个标志来指示对象的值,如果为 true,则禁用 java 访问控制检查,如果为 false,则强制反射对象使用 java 访问控制检查

知道了这个方法java field对象set方法,可以做一个小例子来测试一下。

下面的例子很简单,就是定义一个狗类,它有一个属性和一个方法say。

在main函数中,先用反射来修改,然后在调用say方法的时候打印出来:

[爪哇]

{([]args){//获取Dog的Class对象 class=Class.(“Dog”);//生成对象的实例=.();//获取属性=.(“”) ;//禁止Field check.(true);//设置Field的值为””.set(obj,””);//获取say()方法=.(“say”,[]{} );// 禁止say方法的访问控制检查 say.(true);//调用say方法say.(obj,[]{});}}{// =””;//方法(){。出。(+“:”);}}

输出:小强:汪汪

这里有一个地方需要特别注意:

如果要使用反射来修改访问控制检查,则在获取和Field对象时必须使用sum。不要使用和。

虽然这两种方法的参数是一样的,但不同的是只能获取修改后的属性和方法。并且可以获取任意类型的属性和方法,因为这个例子需要调用私有的属性和方法java field对象set方法,所以使用它。

© 版权声明
THE END
喜欢就支持一下吧
点赞259赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容