静态嵌套类和普通类的区别

Gra*_*son 5 java class

我知道这是一个有点重复的问题,但我想以非常具体的方式提出这个问题,以便澄清一个非常重要的观点。主要问题是:当一个是静态嵌套类而另一个是常规顶级类(除了访问包含类中的私有静态字段之外)时,其他相同的类之间是否有任何区别?

// ContainingClass.java
public class ContainingClass {
    private static String privateStaticField = "";

    static class ContainedStaticClass {
        public static void main(String[] args) {
            ContainingClass.privateStaticField = "new value";
        }
    }
}

// OutsideClass.java
public class OutsideClass {
    public static void main(String[] args) {
        ContainingClass.privateStaticField = "new value";  // DOES NOT COMPILE!!
    }
}
Run Code Online (Sandbox Code Playgroud)

换句话说:ContainedStaticClass可以访问或执行的操作与OutsideClass可以访问或执行的操作之间唯一的区别是OutsideClass不能直接访问吗ContainingClass.privateStaticField?或者是否存在其他未经常讨论或遇到的微妙差异?

spr*_*ter 2

您的陈述是正确的:静态类和外部类之间的唯一区别是访问该类和封闭类的成员。该static关键字声明该类不是内部类:它实际上是封闭类范围内的外部类。

请参阅https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.5.1