当前位置: 首页 > 知识库问答 >
问题:

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

葛兴发
2023-03-14

但是为什么在下面的情景中允许静态嵌套类对象的实例化呢?

class EnclosingClass 
{     
      //...     
      class static StaticInnerClass 
      {         
          //...     
      } 
} 

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

EnclosingClass.StaticInnerClass s = new EnclosingClass.StaticInnerClass()

共有1个答案

茹照
2023-03-14

根据我对静态类的理解,我们不能实例化静态类的对象。

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

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

 类似资料:
  • 问题内容: 我已经开始学习用于Android应用程序开发的Java语言。 根据我对静态类的理解,我们无法实例化静态类的对象。 但是,为什么在随后的情况下允许实例化静态嵌套类对象? 如果将内部类的对象标记为静态,为什么我们可以创建它呢? 问题答案: 根据我对静态类的理解,我们无法实例化静态类的对象。 您对“静态类”的含义的理解不正确。基本上, Java中 的“静态类” 是嵌套类,它没有对包含类的实例

  • 问题内容: 我正在查看Java代码,并注意到它使用了静态嵌套类。 使用静态嵌套类而不是普通内部类的原因是什么? 我能想到的唯一原因是Entry不能访问实例变量,因此从OOP的角度来看,它具有更好的封装性。 但是我认为可能还有其他原因,也许是性能。可能是什么? 注意。我希望我的术语正确,可以将其称为静态内部类,但是我认为这是错误的:http : //java.sun.com/docs/books/t

  • 问题内容: 什么是静态嵌套类?静态和非静态嵌套类有什么区别? 问题答案: 静态内部类是嵌套在具有修饰符的另一个类中的类。除了可以访问在其内部定义的类的私有成员之外,它与顶级类几乎相同。 类是静态内部类。类是一个非静态的内部类。两者之间的区别是,非静态内部类的实例被永久连接到的实例-你不能创建一个没有。不过,您可以独立创建对象。 中的代码,并且都可以访问x; 不允许使用其他代码。

  • 问题内容: 在PHP 5.2中启用严格警告之后,我看到了一个项目中的大量严格标准警告,这些项目最初编写时没有严格警告: 严格标准 : 静态函数 Program :: getSelectSQL()在Program.class.inc中 不应抽象 有问题的函数属于抽象父类Program,并且被声明为抽象静态,因为它应该在其子类(例如TVProgram)中实现。 我确实在这里找到有关此更改的参考: 删除

  • 问题内容: 我正在研究python,尽管我认为我了解了Python的全部概念和概念,但今天我偶然发现了一段我不完全理解的代码: 假设我有一个本应定义Circles但缺少主体的类: 由于我尚未定义任何属性,因此该如何做: 奇怪的是,Python接受上述声明。我不明白为什么Python不会引发。我确实知道,通过 动态类型化, 我只是在需要时将变量绑定到对象,但是类中不应该存在允许我执行此操作的属性吗?

  • 在Oracle的Java教程中,我找到了以下文本: 与类方法和变量一样,静态嵌套类与其外部类关联。和静态类方法一样,静态嵌套类不能直接引用其封闭类中定义的实例变量或方法--它只能通过对象引用来使用它们。 注意:一个静态嵌套类与它的外部类(和其他类)的实例成员交互,就像任何其他顶级类一样。实际上,静态嵌套类在行为上是一个顶级类,为了方便打包,它已经嵌套在另一个顶级类中。 我认为不可能实例化一个静态类