私はクラスがjava
にstatic
と宣言されていますが、混乱していますが、混乱しています。
クラスはオブジェクトの作成に使用され、オブジェクトごとに異なるメモリ割り当てがあるためです。
"static"
はクラスを宣言するときに使用されますか?member variables
はすべてstatic
ですか?
これは意味がありますか?Javaでクラスが静的であると宣言されているのはなぜですか?
答えて
まず、トップレベルクラスを静的にすることはできません。ネストしたクラスを静的にすることができます。ネストされたクラスを静的にすることによって、基本的に、ネストされたクラスのインスタンスを外部クラス/トップレベルクラスから使用する必要はありません。
例:それらは(換言すれば、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 {
}
}
}
}
内部クラスは定義上静的ではありません。 – assylias
@assylias true .. :)、編集済み – PermGenError
@ PermGenError、ほとんどの場合、2つのレベルがあります。 – Al2O3
静的と宣言できるネストされたクラス(クラス内のクラス)のみです。これは、ネストされたクラスにアクセスするために親クラスをインスタンス化する必要がないためです。
いくつかの良い例のコードは、それはちょうど含むクラスを使用して、このクラスの関係を説明しthis answer
にあります。
インナークラスは、別のクラスのスコープ内で定義されたクラスです。内部クラスのインスタンスは、コンテナクラス(インスタンスが作成されたインスタンス)の特定のインスタンスに関連付けられます。
スタティックネストされたクラスはネストされたクラスですが、静的に定義されています。静的メンバーと同様、特定のインスタンスとは関係がありません。彼らはただそのクラスに属しています。ネストされたクラスでは、特定のインスタンスが関連付けられていないため、そのクラスの非静的メンバー/メソッドを参照することはできません。
- 1. Javaの非静的クラスで静的変数を宣言する
- 2. なぜJava定数は静的であると宣言されていますか?
- 3. 子クラスが親クラスの静的インスタンスメンバーを宣言するのはいつ、そしてなぜですか?
- 4. PrintStreamクラスの参照がjavaのSystemクラスの静的変数として宣言されているのはなぜですか?
- 5. JavaのObjectクラスでwait()とnotify()が宣言されているのはなぜですか?
- 6. Javaで別のファイルで宣言されているのはなぜですか?
- 7. 静的イニシャライザで宣言の順序が重要なのはなぜですか?
- 8. HttpServletクラスが抽象クラスとして宣言されているのはなぜですか?
- 9. なぜGADBannerViewが宣言されていないのですか?
- 10. なぜ 'EINTR'が宣言されていないのですか?
- 11. Django - モデルクラスで宣言された変数はなぜ静的です
- 12. 内部クラスが静的メンバーを宣言できないのはなぜですか?
- 13. C++クラスの静的宣言
- 14. クラスの静的宣言
- 15. Javaでは、静的メソッド自体の内部で宣言された変数は静的ですか?
- 16. クラスLinkedListのNodeが静的であるが正常ではないクラスとして定義されている
- 17. メソッドが静的キーワードと宣言されていない場合、クラス内でPHP関数を静的に呼び出すことができますか?
- 18. 基本クラスで静的メソッドを宣言する必要があるのはいつですか?
- 19. メソッドをJavaの静的型引数で宣言できますか?いいえ、なぜですか?
- 20. 静的でない内部クラスの内部でインターフェイスを宣言する方法
- 21. コンストラクタをC++で静的として宣言できないのはなぜですか?
- 22. 使用宣言は静的ですか?
- 23. System.Randomクラスが静的でないのはなぜですか?
- 24. 同じ "auto"宣言で基本クラスが自動的に推論されないのはなぜですか?
- 25. Typescriptとjsx、なぜオブジェクトのライフサイクルでは、静的に宣言された状態はnullですか?
- 26. 同じクラスでメソッドが定義されていると、宣言されていない識別子 'downloadDataFromURL'が使用されるのはなぜですか?
- 27. マップとしてクラス名を宣言できないのはなぜですか?
- 28. aspxコードビハインドファイルが部分クラスとして宣言されているのはなぜですか?
- 29. JDKクラスで、Serializableが完全修飾名で宣言されているのはなぜですか?
- 30. なぜ私は静的な最終変数を非静的なブロックで宣言していませんか?
[回答](http://stackoverflow.com/a/3584151/545637)を参照してください。 – Apalala