为什么我们在java中创建一个静态类?

Kha*_*aza 10 java static class

可能重复:
Java中的静态嵌套类,为什么?

我知道java中的静态字段.但不知道为什么我们创建一个静态类.任何的想法?

Ste*_*ker 18

class Outer {
    int a;
    class Inner {
        void test() {
            System.out.println(a);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

通常,内部类可以引用其拥有类的字段,如上面的(伪)示例中所示.因此Inner的实例可以访问Outer中的字段/方法/等.

但是这需要每个Inner实例都有一个与之关联的外部实例.所以你做不到

new Inner();
Run Code Online (Sandbox Code Playgroud)

但必须这样做

new Outer().new Inner();
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这是不可取的 - 例如,您需要确保您的外部实例可能会收集垃圾,或者您需要使内部实例独立于外部.在这种情况下,您可以将其更改为

static class Inner {
Run Code Online (Sandbox Code Playgroud)

在这种情况下,现在您可能不再像以前那样引用"a",但作为交换,您根本不需要具有Outer实例来拥有Inner实例.


NPE*_*NPE 17

无法声明顶级类static,只有嵌套类可以是:

class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

不同之处在于:

  • 非静态嵌套类(内部类)可以访问封闭类的其他成员,即使它们被声明为私有;
  • 静态嵌套类无权访问封闭类的其他成员.

以上内容摘自Java OO教程.你可以在这里阅读更多.