java内部类中静态字段必须设置为final?

《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

=======
并没有出现报错的情况。 请教一下大佬们,是怎么回事呀?
而且从我的理解上,如果内部类的字段是静态的,那么如果真的通过外部类进行修改,内部类的字段对应值就应该发生改变,也是和输出结果想匹配的。

=======
image.png

======
image.png

阅读 2k
1 个回答
    class MyInnerClass {
        static String name;

这里编译都不能编译,要么给 class 加 static,要么把字段的 static 去掉

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题