解决利用反射创建对象时无法访问private权限修饰符修饰的方法

首先我们先了解以下反射机制:指在运行时去获得一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期任然可以扩展。而反射就是通过构造方法对象里面的方法来创建对象。

        首先我们利用反射获取了Class对象,并用Class对象创建了一个private修饰的构造方法对象,然后用这个构造方法对象获取对象。图文中siyou:表示对象修饰符为private。

        

 其中private修饰的方法如下

 

此时我们运行就会报一个的时候,就会报一个错误:IllegalAccessException。

不完整图片如下

具体错误如下:

Exception in thread "main" java.lang.IllegalAccessException: Class Classloader.ReflectDemo3 can not access a member of class Classloader.Student with modifiers "private"

通俗来理解就是不能访问到private修饰的方法。

如何解决呢?此时我们只需要调用一个方法:public void setAccessible(boolean flag)  

 

将值 设为true,压制(或者叫取消)java语言访问检查。此时我们就可以使用私有的构造方法来创建对象了。

具体操纵如下:

 控制台输出:

 补充一点:什么是Java的语言检查:

可以理解成Java中的一个安全检查的开关,因为Java是面向对象的语言,提供了属性和方法的封装,因此在程序执行时会进行大量的安全访问检查,判断是否有访问的权限。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值