【问题标题】:Why is class declared as static in Java? [duplicate]为什么类在Java中声明为静态? [复制]
【发布时间】:2013-03-05 02:36:43
【问题描述】:

我看到类在java 中被声明为static,但很困惑:
由于类是用来创建对象的,不同的对象有不同的内存分配。
那么"static"在声明类的时候是干什么用的?是不是说member variables都是static呢?
这有意义吗?

【问题讨论】:

标签: java class object static


【解决方案1】:

首先,您不能将顶级类设为静态。您只能将嵌套类设为静态。通过使嵌套类静态,您基本上是在说您不需要嵌套类的实例来从外部类/顶级类中使用它。

例子:

class Outer {

static class nestedStaticClass {

//its member variables and methods (don't nessarily need to be static)
//but cannot access members of the enclosing class
}

public void OuterMethod(){
//can access members of nestedStaticClass w/o an instance
}
}

还要补充一点,在内部类中声明静态字段是非法的,除非它们是常量(换句话说,static final)。由于静态嵌套类不是内部类,您可以在此处声明静态成员。

类可以嵌套在嵌套类中吗?

总之,是的。看下面的Test,嵌套的内部类和嵌套的静态类都可以在它们中包含嵌套类。但是请记住,您只能在顶级类中声明静态类,在内部类中声明它是非法的。

public class Test {
    public class Inner1 {
        public class Inner2 {
            public class Inner3 {

            }
        }
    }
    public static class nested1 {
        public static class nested2 {
            public static class nested3 {

            }
        }   
    }
}

【讨论】:

  • 内部类根据定义是非静态的。
  • @assylias true .. :),已编辑
  • @PermGenError,所以最多有两个级别。
  • @Rubbylevel 是什么意思,嵌套类(静态/非静态)只是顶级类的成员 :)
  • '通过将嵌套类设为静态,你基本上是在说你不需要嵌套类的实例来从外部类/顶级类中使用它'是不正确的。您不需要 outer 类的实例来创建 static nested 类的实例。 “不能访问封闭类的成员”也不正确:它可以访问static 成员。
【解决方案2】:

嵌套类(类中的类)是唯一可以声明为静态的类。这样就不必实例化父类来访问嵌套类。

this answer中有一些很好的示例代码

【讨论】:

    【解决方案3】:

    它只是描述了这个类与包含类的关系。

    内部类是在另一个类的范围内定义的类。内部类的实例附加到容器类的特定实例(创建它们的实例)。

    静态嵌套类是嵌套类,但定义为静态。像静态成员一样,它们与特定实例无关;它们只是属于包含类。在嵌套类中,您不能引用包含类的非静态成员/方法,因为没有与它们关联的特定实例。

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2011-01-23
      • 1970-01-01
      • 2013-05-06
      • 2011-12-26
      • 2015-12-27
      • 1970-01-01
      • 2015-09-06
      • 2014-04-11
      相关资源
      最近更新 更多