为什么允许实例化静态嵌套类对象?

Par*_*ram 21 java oop nested-class inner-classes

我已经开始学习用于Android应用程序开发的Java语言.

根据我对静态类的理解,我们无法实例化静态类的对象.

但为什么静态嵌套类对象的实例化允许在后面的situaltion?

class EnclosingClass 
{     
      //...     
      class static StaticInnerClass 
      {         
          //...     
      } 
} 
Run Code Online (Sandbox Code Playgroud)

为什么我们可以创建内部类的对象,如果它被标记为静态?

EnclosingClass.StaticInnerClass s = new EnclosingClass.StaticInnerClass()
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 27

根据我对静态类的理解,我们无法实例化静态类的对象.

您对"静态类"含义的理解是不正确的.基本上,Java中的"静态类" 是一个嵌套类,它没有对包含类的实例的隐式引用.有关更多信息,请参阅JLS的8.5.1节,特别是:

static关键字可以修改非内部类或接口T的主体内的成员类型C的声明.其效果是声明C不是内部类.正如T的静态方法在其体内没有T的当前实例一样,C也没有T的当前实例,也没有任何词法封闭实例.

也许你在想C#中的静态类,它们完全不同?

  • @Keyser:不,我的意思是*嵌套*类.请参阅JLS的引用:静态类指示类不是*内部类.从JLS的8.1.3节开始:"内部类是一个未显式或隐式声明为静态的嵌套类." (2认同)