天天看點

論java之反射機制,通路類中私有變量,調用私有方法

我對于發射機制的了解就是它非常流氓,不顧成員變量或成員方法前的保護機制是什麼,都可以通路。非常霸道!

這也告訴我們開發中須謹慎使用,否則後果嚴重。什麼通路權限都形同虛設了

先是一個類檔案

//f.java
public class f{
private int i;
f(){
i = -1;
}
private void set(int aa){
this.i = aa;
}
public int get(){
return this.i;
}
}      
//fanshe.java
import java.lang.reflect.*;
public class fanshe {
public static void main(String[] args) {
// TODO Auto-generated method stub
   try{
 fanshe fan = new fanshe();
     f  f1 =  new f();
     System.out.println(f1.get());
     Class c = f1.getClass();
     Method method = c.getDeclaredMethod("set", int.class);
     method.setAccessible(true);
     method.invoke(f1, 10000);
     System.out.println(f1.get());
     Field field = c.getDeclaredField("i");
     field.setAccessible(true);
     field.set(f1, new Integer(99090));
     System.out.println(f1.get());
 }
   catch(Exception e){
   e.printStackTrace();
   }
}
}      
-1
10000
99090