当前位置: 首页 > 后端技术 > Java

面试官:private可以通过反射访问到,那么private是什么意思呢?

时间:2023-04-01 20:34:59 Java

Java,在一个类中,为了防止外界访问某些属性和方法,通常会设置为private,这样就无法正常访问了(对象名.属性名,对象名.方法名称)属性和方法,但有没有其他方法可以访问它?答案是肯定的,这就是java反射带来的便利。使用反射访问类的私有属性和方法如下:/***@Description:reflection*@author:Mr_VanGogh*@date:2019/2/20pm2:52*/publicclassReflect{privateStringname;私人年龄;privateReflect(intage){this.age=age;}privatevoidspeak(Stringname){System.out.println("Mynameis"+name);}publicReflect(Stringname){this.name=name;首先,我们需要了解三个反射包中的类:Constructor:表示一个类的单个构造函数。通过Constructor,我们可以执行一个类的某个构造函数(带参数或不带参数)来创建一个对象。Method:表示类中的单个方法,可以用来执行类的一个公共方法,可以带参数也可以不带参数,可以接收返回值。Field:表示类中的单个属性,用于设置或获取属性AccessibleObject:以上三个类的父类,提供构造方法,普通方法,以及访问控制属性的能力。使用Class类中的方法获取该类中所有的Constructor对象、Method对象和Field对象。但是仍然不能访问私有构造函数、普通方法和私有属性。这时,我们可以利用它们继承父类(AccessibleObject)中的setAccessible()方法来设置或取消访问检查,从而实现对私有对象的访问。目的。publicstaticvoidmain(String[]args)throwsException{Reflectreflect=newReflect("a");方法[]方法=Reflect.class.getMethods();Field[]fields=Reflect.class.getDeclaredFields();对于(inti=0;i