代码如下
import java.lang.reflect.Field;
class A {
private final int a = 1;
public void a() {
System.out.println(a);
}
}
class B {
private final int b;
public B(int b) {
this.b = b;
}
public void b() {
System.out.println(b);
}
}
public class Test {
public static void main(String args[]) throws Exception {
A a = new A();
B b = new B(2);
Field field_a = A.class.getDeclaredField("a");
Field field_b = B.class.getDeclaredField("b");
field_a.setAccessible(true);
field_b.setAccessible(true);
field_a.set(a, 520);
field_b.set(b, 250);
System.out.println(field_a.get(a));
a.a();
System.out.println(field_b.get(b));
b.b();
}
}
输出结果:
520
1
250
250
问题来了:为什么两种不一样的初始化final域的方式会造成两种截然不同的效果??