首先我们先了解以下反射机制:指在运行时去获得一个类的变量和方法信息。然后通过获取到的信息来创建对象,调用方法的一种机制。由于这种动态性,可以极大的增强程序的灵活性,程序不用在编译期就完成确定,在运行期任然可以扩展。而反射就是通过构造方法对象里面的方法来创建对象。
首先我们利用反射获取了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是面向对象的语言,提供了属性和方法的封装,因此在程序执行时会进行大量的安全访问检查,判断是否有访问的权限。