反射的安全性控制机制好象没有起作用

我有这样的一个简单类:


public class GG {
public String name = "test";
}

我想用反射机制给它动态赋值,于是我写了这样的一个类:

import java.lang.reflect.Field;
public class Test1 {
public static void main(String[] args) {
try {
Class cls = Class.forNameGG.class.getName());
GG gg = (GG) cls.newInstance();
Field field = cls.getDeclaredField("name");
// field.setAccessible(true);
System.out.println((String)field.get(gg));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}

}

}

我发现注释掉field.setAccessible(true)和没有注释掉的结果都是一样,都打印出:
"test"
照说注释掉之后应该会抛出一个IllegalAccessException 异常,请问一下这是怎么回事?
java version "1.4.2"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.
Java HotSpot(TM) Client VM (build 1.4.2-b28, mixed mode)
eclipse 3.0.0
运行时没有加任何参数

还没有赋值就出现了问题,晕啊~~

field.setAccessible(true);

只是在 这个field是private 的时候才有效。如果这个field是public的
好像field.setAccessible(true);不会起作用,

即使你设定了
field.setAccessible(false);
还是可以修改他的值。

这是测试出来的结果。

哦,我明白了,setAccessible(true)方法的意思是恢复field的安全性,把它原有的权限还给它。如果为false即强性剥夺它的权限,将它充公。谢谢你的答复。

不好意思说反了,应该是:
setAccessible(false)方法的意思是恢复field的安全性,把它原有的权限还给它。如果为true即强性剥夺它的权限,将它充公。
默认的是保持它原有的权限。