setAccessible()方法

setAccessible()方法
  1.  java.lang.IllegalAccessException:  
  2. Class com.test.accessible.Main   
  3. can not access   
  4. a member of class com.test.accessible.AccessibleTest  
  5. with modifiers "private"  
java代码中,常常将一个类的成员变量置为private 
在类的外面获取此类的私有成员变量的value时,需要注意: 
测试类:
public  class AccessibleTest {  
  
     private  int id;  
     private String name;  
  
     public AccessibleTest() {  
  
    }  
  
     public  int getId() {  
         return id;  
    }  
  
     public  void setId( int id) {  
         this.id = id;  
    }  
  
     public String getName() {  
         return name;  
    }  
  
     public  void setName(String name) {  
         this.name = name;  
    }  
  
}  

Main类:
public  class Main {  
  
     public  static  void main(String[] args)  throws Exception {  
        Class clazz = Class.forName("com.test.accessible.AccessibleTest");  
        AccessibleTest at =  new AccessibleTest();  
        at.setId(1);  
        at.setName("AT");  
         for (Field f : clazz.getDeclaredFields()) {  
            f.setAccessible( true); // AccessibleTest类中的成员变量为private,故必须进行此操作  
            System.out.println(f.get(at)); // 获取当前对象中当前Field的value  
        }  
  
    }  
  
}  

如果没有在获取private的Field之前调用setAccessible(true)方法,异常:
java.lang.IllegalAccessException:  
Class com.test.accessible.Main   
can not access   
a member of  class com.test.accessible.AccessibleTest  
with modifiers "private"  

当然在AccessibleTest类的内部(AccessibleTest的内部类除外)

进行如上操作则不需要调用setAccesible()方法


**另外:由于Accessible的 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
值为 false 则指示反射的对象应该实施 Java 语言访问检查。 
 
将其设为true,可以 提高java反射速度 

你可能感兴趣的:(setAccessible()方法)