2012-11-04 17 views
5

可能性の重複:
Java: Static Class?クラスをJavaで静的としてインスタンス化できますか?

クラスは、Javaで静的としてインスタンス化することはできますか?

static class c1(){ 

} 

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

+1

以下のようにあなたがそれをしようとしないのはなぜあなたは、静的クラスを持つことができますか? – Baz

答えて

2

クラスはjavaのstaticキーワードでインスタンス化できますか?例:静的クラスc1(){}

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

あなたはクラスをstaticと宣言できますが、これはネストされたクラスに対してのみ実行できます。つまり、の別のクラスに宣言されたクラスです。

これと混同午前と非静的なものの持つメモリマッピング私はあなたがここで話しているかの手掛かりを持っていない

を助けてください。この点についてさらに助けが必要な場合は、より明確に説明する必要があります。

7

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

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

(私は約10年間、JVMの内臓で働いていたし、私はまだ、これが混乱を見つける。)

+0

"静的内部クラスインスタンスは、作成インスタンスに関連付けられていません。これは私が必要なものです! –

1

静的メモリマッピングとは何の関係もありません。これは、関連するインスタンスがないことを意味します。

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

0

パラダイムが壊れます。これを考慮してください:静的メンバーはすべてのインスタンスが共通して持つメンバーですが、この共有アイデアをクラスに拡張する方法が明確ではありませんか?

staticキーワードは何を期待していましたか?

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(); 

    } 
} 
+0

上記の例では、複数のレベルの継承が定義されています... JAVAでは可能ですか? –

+0

はい、Javaで可能です – Abhishekkumar

関連する問題