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

时间:2011-10-21 07:19:29

标签: java class static

  

可能重复:
  Static nested class in Java, why?

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

3 个答案:

答案 0 :(得分:17)

无法声明顶级类static,只能嵌套类:

class OuterClass {
    ...
    static class StaticNestedClass {
        ...
    }
    class InnerClass {
        ...
    }
}

区别在于:

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

以上内容摘自Java OO教程。您可以阅读更多here

答案 1 :(得分:17)

class Outer {
    int a;
    class Inner {
        void test() {
            System.out.println(a);
        }
    }
}

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

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

new Inner();

但必须做

new Outer().new Inner();

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

static class Inner {

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

答案 2 :(得分:0)

您不能声明静态类。你唯一能做的就是声明静态内部类,这意味着你不需要外部类的实例来访问它。