《java核心技术 卷一》中写到
内部类中声明的所有静态字段都必须是final
个人测试代码如下
MyOuterClass.java
public class MyOuterClass {
MyInnerClass innerClass;
public MyInnerClass getInnerClass() {
if (null == innerClass) {
innerClass = new MyInnerClass();
}
return innerClass;
}
class MyInnerClass {
static String name;
int age;
public void setName(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
}
Main.java
public class Main {
public static void main(String[] args) {
MyOuterClass outerClass = new MyOuterClass();
outerClass.getInnerClass().setName("abc");
System.out.println(outerClass.getInnerClass().getName());
MyInnerClass innerClass = outerClass.new MyInnerClass();
System.out.println(innerClass.getName());
innerClass.setName("456");
System.out.println(innerClass.getName());
System.out.println(outerClass.getInnerClass().getName());
}
}
运行结果为
abc
abc
456
456
=======
并没有出现报错的情况。 请教一下大佬们,是怎么回事呀?
而且从我的理解上,如果内部类的字段是静态的,那么如果真的通过外部类进行修改,内部类的字段对应值就应该发生改变,也是和输出结果想匹配的。
=======
======
这里编译都不能编译,要么给 class 加 static,要么把字段的 static 去掉