結論:可以修改。
package shiro;
public class Test {
private final String NAME = "天氣晴朗";
public String getName(){
return NAME;
}
}
package shiro;
import java.lang.reflect.Field;
public class Client {
public static void main(String[] args) throws NoSuchFieldException {
Test test = new Test();
Class mClass = test.getClass();
Field field = mClass.getDeclaredField("NAME");
if(field != null){
//setAccessible(true);得作用就是讓我們在用反射時訪問私有變量
field.setAccessible(true);
try {
System.out.println("modify before "+field.get(test));
field.set(test,"鋼絲");
System.out.println("modify after "+field.get(test));
System.out.println("getName = "+test.getName());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
但如果是要修改上面getName方法的返回值,則要看Test編譯成的class文件是什麼樣子的。