我知道这是一个有点重复的问题,但我想以非常具体的方式提出这个问题,以便澄清一个非常重要的观点。主要问题是:当一个是静态嵌套类而另一个是常规顶级类(除了访问包含类中的私有静态字段之外)时,其他相同的类之间是否有任何区别?
// 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?或者是否存在其他未经常讨论或遇到的微妙差异?
您的陈述是正确的:静态类和外部类之间的唯一区别是访问该类和封闭类的成员。该static关键字声明该类不是内部类:它实际上是封闭类范围内的外部类。
请参阅https://docs.oracle.com/javase/specs/jls/se8/html/jls-8.html#jls-8.5.1