22

Androidアプリ開発のためにJava言語の学習を始めました。

静的クラスに基づく私の理解によれば、静的クラスのオブジェクトをインスタンス化することはできません。

しかし、次の状況で静的ネスト クラス オブジェクトのインスタンス化が許可されるのはなぜですか?

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

静的としてマークされている場合、内部クラスのオブジェクトを作成できるのはなぜですか?

EnclosingClass.StaticInnerClass s = new EnclosingClass.StaticInnerClass()
4

3 に答える 3

29

静的クラスに基づく私の理解によれば、静的クラスのオブジェクトをインスタンス化することはできません。

「静的クラス」の意味についてのあなたの理解は正しくありません。基本的に、 Javaの「静的クラス」は、含まれているクラスのインスタンスへの暗黙的な参照を持たないネストされたクラスです。詳細については、JLS のセクション 8.5.1 を参照してください。具体的には、次のとおりです。

static キーワードは、非内部クラスまたはインターフェイス T の本体内のメンバー型 C の宣言を変更する場合があります。その効果は、C が内部クラスではないことを宣言することです。T の静的メソッドがその本体に T の現在のインスタンスを持たないのと同様に、C にも T の現在のインスタンスはなく、字句的に囲んでいるインスタンスもありません。

おそらく、まったく異なる C# の静的クラスを考えていたのではないでしょうか?

于 2012-10-11T09:37:28.730 に答える
0

確認してください。ネストされたクラスに役立つかもしれません

于 2012-10-11T09:37:02.463 に答える