Java中静态类背后的概念

Jin*_*iel 7 java static static-classes

请考虑以下代码

class A {
    static class B{
        int a = 0;
    }
    public static void main(String argc[]) {
        B var1 = new B();
        B var2 = new B();
        var1.a = 5;
        var2.a = 6;
        System.out.println(var1.a+" and "+var2.a);
    }
}
Run Code Online (Sandbox Code Playgroud)

它输出5和6.静态成员只加载一次.但输出与该语句相矛盾.所以静态类的概念肯定与静态数据成员不同.那么静态类的静态意味着什么

Fra*_*ank 10

来自oracle的复制粘贴:

静态嵌套类

与类方法和变量一样,静态嵌套类与其外部类相关联.和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法 - 它只能通过对象引用来使用它们.

注意:静态嵌套类与其外部类(和其他类)的实例成员交互,就像任何其他顶级类一样.实际上,静态嵌套类在行为上是一个顶级类,它已嵌套在另一个顶级类中以方便打包. 使用封闭的类名访问静态嵌套类:

OuterClass.StaticNestedClass
Run Code Online (Sandbox Code Playgroud)

例如,要为静态嵌套类创建对象,请使用以下语法:

OuterClass.StaticNestedClass nestedObject =
     new OuterClass.StaticNestedClass();
Run Code Online (Sandbox Code Playgroud)

一个例子:

LinkedList.Entry或Map.Entry不需要是顶级类,因为它仅由LinkedList aka Map使用.而且由于它们不需要访问外部类成员,因此它是静态的 - 这是一种更清晰的方法.

  • @KirillKulakov [`Map.Entry <K,v>`](http://docs.oracle.com/javase/6/docs/api/java/util/Map.Entry.html)就是一个很好的例子. (2认同)