import java.lang.reflect.Field;
public class Filed类 {
public static void main(String[] args) {
A one=new A(1,2);
Field f1=null;
Field f2=null;
try {
A: f1=one.getClass().getField("a");//1.通过A类的字节码获取其指定的Filed的实例.
//2.注意此处得到的成员变量为类的成员变量,f输出为null
//3.此getField方法只能获取公共的成员变量 否则抛出NoSuchFieldException
f2=one.getClass().getDeclaredField("a");//此getDeclaredField方法可以获得任何权限的成员变量
try {
f2.setAccessible(true);//当成员变量为私有是,通过此方法亦可访问。此即为暴力反射
System.out.println(f2.get(one));//此get方法默认条件下只能访问非私有的成员变量否则抛出IllegalAccessException
} catch (IllegalArgumentException e) {
System.out.println("非法参数");
} catch (IllegalAccessException e) {
System.out.println("非法访问异常");
}
} catch (SecurityException e) {
System.out.println("安全异常");
} catch (NoSuchFieldException e) {
System.out.println("没有此成员变量");
}
}
}
class A{
private int a;
public int b;
public A(int a, int b) {
super();
this.a = a;
this.b = b;
}
}
|
|