我對于發射機制的了解就是它非常流氓,不顧成員變量或成員方法前的保護機制是什麼,都可以通路。非常霸道!
這也告訴我們開發中須謹慎使用,否則後果嚴重。什麼通路權限都形同虛設了
先是一個類檔案
//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