2013-03-16 10 views
11

私はクラスがjavastaticと宣言されていますが、混乱していますが、混乱しています。
クラスはオブジェクトの作成に使用され、オブジェクトごとに異なるメモリ割り当てがあるためです。
"static"はクラスを宣言するときに使用されますか?member variablesはすべてstaticですか?
これは意味がありますか?Javaでクラスが静的であると宣言されているのはなぜですか?

+1

[回答](http://stackoverflow.com/a/3584151/545637)を参照してください。 – Apalala

答えて

21

まず、トップレベルクラスを静的にすることはできません。ネストしたクラスを静的にすることができます。ネストされたクラスを静的にすることによって、基本的に、ネストされたクラスのインスタンスを外部クラス/トップレベルクラスから使用する必要はありません。

例:それらは(換言すれば、static final)定数である場合を除き

class Outer { 

static class nestedStaticClass { 

//its member variables and methods (don't nessarily need to be static) 
//but cannot access members of the enclosing class 
} 

public void OuterMethod(){ 
//can access members of nestedStaticClass w/o an instance 
} 
} 

また追加するには、内部クラス内の静的フィールドを宣言することは違法です。静的ネストされたクラスは内部クラスではないので、ここに静的メンバーを宣言できます。

クラスはネストされたクラスでネストできますか?

つまり、はいです。以下のTestを参照すると、ネストされた内部クラスとネストされた静的クラスの両方は、それらにネストされたクラスを持つことができます。しかし、あなたはトップレベルのクラスの中でのみ静的なクラスを宣言することができることを覚えておいてください。内側のクラスの内側に宣言することは違法です。

public class Test { 
    public class Inner1 { 
     public class Inner2 { 
      public class Inner3 { 

      } 
     } 
    } 
    public static class nested1 { 
     public static class nested2 { 
      public static class nested3 { 

      } 
     } 
    } 
} 
+5

内部クラスは定義上静的ではありません。 – assylias

+0

@assylias true .. :)、編集済み – PermGenError

+0

@ PermGenError、ほとんどの場合、2つのレベルがあります。 – Al2O3

5

静的と宣言できるネストされたクラス(クラス内のクラス)のみです。これは、ネストされたクラスにアクセスするために親クラスをインスタンス化する必要がないためです。

いくつかの良い例のコードは、それはちょうど含むクラスを使用して、このクラスの関係を説明しthis answer

0

にあります。

インナークラスは、別のクラスのスコープ内で定義されたクラスです。内部クラスのインスタンスは、コンテナクラス(インスタンスが作成されたインスタンス)の特定のインスタンスに関連付けられます。

スタティックネストされたクラスはネストされたクラスですが、静的に定義されています。静的メンバーと同様、特定のインスタンスとは関係がありません。彼らはただそのクラスに属しています。ネストされたクラスでは、特定のインスタンスが関連付けられていないため、そのクラスの非静的メンバー/メソッドを参照することはできません。

関連する問題