6

重複の可能性:
Java: 静的クラス?

javaでクラスを静的としてインスタンス化できますか?

static class c1(){

}

これはできますか?私はこれと非静的なものとのメモリマッピングと混同しています。助けてください

4

5 に答える 5

10

クラス定義での重要性はstatic、クラスをインスタンス化できるかどうかではなく、外側のクラスの非静的メソッド内からクラスをインスタンス化する必要があるかどうかです。

非静的内部クラス インスタンスは、それらを作成したインスタンスに結び付けられます。内部クラス インスタンスには、作成元のインスタンスに戻るポインターがあります (これは多くの点で役立ちます)。静的な内部クラスのインスタンスは、作成中のインスタンスに関連付けられていません。

(私は JVM の内部で約 10 年間働いてきましたが、いまだに混乱しています。)

于 2012-11-04T12:56:13.133 に答える
2

java の static キーワードを使用してクラスをインスタンス化できますか? 例: static class c1(){ }

あなたの用語は正しくありません。「クラスのインスタンス化」とは、クラスのインスタンスを作成することを意味します。つまり、オブジェクトを作成します。これはnew操作を使用して行われます。あなたの例は、実際にクラスを宣言することです。

そうは言っても、はい、クラスを として宣言できますがstatic、これはネストされたクラスに対してのみ行うことができます。つまり、別のクラス内で宣言されたクラスです。

これと非静的なものとのメモリマッピングと混同しています助けてください

私はあなたがここで何について話しているのか見当がつきません。この点についてさらに支援が必要な場合は、自分自身をより明確に説明する必要があります。

于 2012-11-04T12:43:41.153 に答える
1

static はメモリ マッピングとは関係ありません。これは、関連付けられているインスタンスがないことを意味します。

a のstatic class場合、クラスのインスタンスが外部クラスのインスタンスに関連付けられていないことを意味します。

于 2012-11-04T12:56:36.993 に答える
0

それはパラダイムを壊します。これを考えてみましょう: 静的メンバーは、すべてのインスタンスが共通に持つメンバーですが、この共有の概念をクラスに拡張する方法が明確ではありませんか?

static キーワードが何をすることを期待していましたか?

于 2012-11-04T12:57:35.793 に答える
0

以下に示すように、静的クラスを持つことができます

class A
{
static class B   //static inner class
    {
     static void dis()
      {
      System.out.println("this is me");
      }
    }
}

class four extends A.B
{ 
    public static void main(String args[])
    {
    dis();

    }
}
于 2012-11-04T13:11:03.370 に答える