Java如何通过暴力反射获取私有成员变量

        我们都知道,当一个类的成员变量或者方法的访问属性设置为私有时,类外的方法是无法访问的,只能通过方法内部的成员方法访问,那么如果类中没有访问私有成员变量或者私有成员方法的共有方法,还可不可以暴力强制访问私有的成员呢?答案是有的,我们需要通过反射来实现

如图,创建了一个Cat类,其中声明了私有变量num和私有方法drink()和私有构造函数

Java如何通过暴力反射获取私有成员变量_第1张图片

通过反射实现访问私有成员:

我们只需要灵活调用这个函数

下面是实战

1.(如何调用Cat对象的私有成员变量num):

Java如何通过暴力反射获取私有成员变量_第2张图片

首先创建一个类对象实例,然后获取这个类对象的成员变量,获取方法一点要用getDeclaredField,

原因如下图所示:

Java如何通过暴力反射获取私有成员变量_第3张图片

然后再调用变量的禁止检查访问控制函数setAccessible(true),最后调用变量的get方法,参数为对应的cat对象实例,即可访问到私有变量num的值

2.(如何调用Cat对象的私有成员方法drink)

可以参考上一个例子的实现方法

Java如何通过暴力反射获取私有成员变量_第4张图片

3.(如何调用Cat对象的私有构造方法)

同样是参考上一个例子的实现方法

Java如何通过暴力反射获取私有成员变量_第5张图片

你可能感兴趣的:(Java基础,java,安全)