私はクラスが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. 子クラスが親クラスの静的インスタンスメンバーを宣言するのはいつ、そしてなぜですか?
- 3. PrintStreamクラスの参照がjavaのSystemクラスの静的変数として宣言されているのはなぜですか?
- 4. JavaのObjectクラスでwait()とnotify()が宣言されているのはなぜですか?
- 5. Javaで別のファイルで宣言されているのはなぜですか?
- 6. 静的イニシャライザで宣言の順序が重要なのはなぜですか?
- 7. HttpServletクラスが抽象クラスとして宣言されているのはなぜですか?
- 8. 内部クラスが静的メンバーを宣言できないのはなぜですか?
- 9. C++クラスの静的宣言
- 10. クラスの静的宣言
- 11. Javaでは、静的メソッド自体の内部で宣言された変数は静的ですか?
- 12. 基本クラスで静的メソッドを宣言する必要があるのはいつですか?
- 13. aspxコードビハインドファイルが部分クラスとして宣言されているのはなぜですか?
- 14. コンストラクタをC++で静的として宣言できないのはなぜですか?
- 15. System.Randomクラスが静的でないのはなぜですか?
- 16. 同じ "auto"宣言で基本クラスが自動的に推論されないのはなぜですか?
- 17. JDKクラスで、Serializableが完全修飾名で宣言されているのはなぜですか?
- 18. 静的として宣言されたミドルウェアのmongooseモデルにアクセスできない
- 19. 静的アナライザーには、私にはリークがあると言われています...なぜですか?
- 20. argv []がconstとして宣言されているのはなぜですか? ARGV [] CONSTとして宣言された理由のObjective-Cでは、
- 21. WPFコントロールで静的または非静的としてEventHandlerを宣言する
- 22. `std`モジュールが宣言されていないのはなぜですか?
- 23. 関数が静的であると宣言されている場合や、その中のフィールドが静的である場合に静的でない場合は、何らかの違いが生じますか?
- 24. 静的型付き言語で型の宣言が重要なのはなぜですか?
- 25. プロトタイプで宣言されている関数が呼び出されないのはなぜですか?
- 26. ClassNotFoundExceptionがマニフェストで宣言されたクラスである
- 27. 静的バインディングがクラスと関数で異なるのはなぜですか?
- 28. クラスで宣言されているが未定義のメソッド
- 29. なぜこの変数が宣言されていないのですか?
- 30. 私のクラスが内部で宣言されたインタフェースを実装できないのはなぜですか?
[回答](http://stackoverflow.com/a/3584151/545637)を参照してください。 – Apalala