static class
Javaのようなものはありますか?
そのようなクラスの意味は何ですか。静的クラスのすべてのメソッドも必要static
ですか?
逆に、クラスにすべての静的メソッドが含まれている場合、クラスも静的にする必要がありますか?
静的クラスは何に適していますか?
static class
Javaのようなものはありますか?
そのようなクラスの意味は何ですか。静的クラスのすべてのメソッドも必要static
ですか?
逆に、クラスにすべての静的メソッドが含まれている場合、クラスも静的にする必要がありますか?
静的クラスは何に適していますか?
Javaにはネストされた静的クラスがありますが、トップレベルの静的クラスを探しているようです。Java には最上位クラスを静的にする方法はありませんが、次のように静的クラスをシミュレートできます。
final
- 静的クラスの拡張は意味がないため、クラスの拡張を防ぎますprivate
- 静的クラスをインスタンス化する意味がないため、クライアント コードによるインスタンス化を防ぎます。static
ます。クラスはインスタンス化できないため、インスタンス メソッドを呼び出すことも、インスタンス フィールドにアクセスすることもできません。上記の提案による簡単な例:
public class TestMyStaticClass {
public static void main(String []args){
MyStaticClass.setMyStaticMember(5);
System.out.println("Static value: " + MyStaticClass.getMyStaticMember());
System.out.println("Value squared: " + MyStaticClass.squareMyStaticMember());
// MyStaticClass x = new MyStaticClass(); // results in compile time error
}
}
// A top-level Java class mimicking static class behavior
public final class MyStaticClass {
private MyStaticClass () { // private constructor
myStaticMember = 1;
}
private static int myStaticMember;
public static void setMyStaticMember(int val) {
myStaticMember = val;
}
public static int getMyStaticMember() {
return myStaticMember;
}
public static int squareMyStaticMember() {
return myStaticMember * myStaticMember;
}
}
静的クラスの利点は何ですか? 静的クラスの適切な使用法は、インスタンス化が意味をなさない 1 回限りのユーティリティ クラスやライブラリ クラスを定義することです。良い例は、PI や E などのいくつかの数学定数を含み、単に数学的な計算を提供する Math クラスです。そのような場合にインスタンス化を要求することは不必要であり、混乱を招きます。Math
クラスとソース コードを参照してください。final
それがであり、そのすべてのメンバーが であることに注意してくださいstatic
。Java で最上位クラスの宣言が許可されているstatic
場合、Math クラスは実際に静的になります。
Java には「入れ子になった静的クラス」がありますが、C# の静的クラスとまったく同じではありません。静的なネストされたクラスは、外部クラスのインスタンスへの参照を暗黙的に持たないクラスです。
ネストされた静的クラスは、インスタンス メソッドと静的メソッドを持つことができます。
Java には最上位の静的クラスなどというものはありません。
静的なネストされたクラスがあります。この [静的なネストされた] クラスは、それ自体をインスタンス化するために、囲んでいるクラスのインスタンスを必要としません。
これらのクラス [静的にネストされたもの] は、囲んでいるクラスの静的メンバーにのみアクセスできます [囲んでいるクラスのインスタンスへの参照がないため...]
コードサンプル:
public class Test {
class A { }
static class B { }
public static void main(String[] args) {
/*will fail - compilation error, you need an instance of Test to instantiate A*/
A a = new A();
/*will compile successfully, not instance of Test is needed to instantiate B */
B b = new B();
}
}
はい、Javaには静的なネストされたクラスがあります。ネストされたクラスを static と宣言すると、それが属する外部クラスをインスタンス化する必要なく、インスタンス化できるスタンドアロン クラスが自動的に作成されます。
例:
public class A
{
public static class B
{
}
}
は static と宣言されているためclass B
、次のように明示的にインスタンス化できます。
B b = new B();
class B
スタンドアロンにするために static と宣言されていない場合、インスタンス オブジェクトの呼び出しは次のようになります。
A a= new A();
B b = a.new B();
a 内のメンバーが..class
として宣言されるとどうなりますか? static
そのメンバーには、 をインスタンス化せずにアクセスできますclass
。したがって、外部クラス(トップレベルクラス)を作成しstatic
ても意味がありません。したがって、許可されていません。
ただし、内部クラスを静的として設定できます (最上位クラスのメンバーであるため)。その後、最上位クラスをインスタンス化せずにそのクラスにアクセスできます。次の例を考えてみましょう。
public class A {
public static class B {
}
}
これで、別の class 内でC
、 class のインスタンスを作成せずに classB
にアクセスできるようになりましたA
。
public class C {
A.B ab = new A.B();
}
static
クラスもnon-static
メンバーを持つことができます。クラスのみが静的になります。
しかし、static
キーワードが class から削除されB
た場合、 のインスタンスを作成せずに直接アクセスすることはできませんA
。
public class C {
A a = new A();
A.B ab = a. new B();
}
しかし、内部クラス内にstatic
メンバーを持つことはできません。non-static
Java でクラスを static にすることはできますか?
答えはYESです。Javaで静的クラスを持つことができます。Java には、静的インスタンス変数、静的メソッド、および静的ブロックがあります。Java では、クラスを静的にすることもできます。
Java では、トップレベル (外部) クラスを静的にすることはできません。ネストされたクラスのみを静的にできます。
静的なネストされたクラスと非静的なネストされたクラス
1) ネストされた静的クラスは外部クラスの参照を必要としませんが、非静的のネストされたクラスまたは内部クラスには外部クラスの参照が必要です。
2) 内部クラス (または非静的ネスト クラス) は、外部クラスの静的メンバーと非静的メンバーの両方にアクセスできます。静的クラスは、Outer クラスの非静的メンバーにアクセスできません。外部クラスの静的メンバーのみにアクセスできます。
ここを参照してください: https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
外部クラスを静的にすることはできませんが、ネストされた/内部クラスは静的にすることができます。これは基本的に、外部クラスのインスタンスを作成せずに、ネストされた/内部クラスを使用するのに役立ちます。
簡単に言えば、Java はクラスの static 宣言を内部クラスに対してのみサポートし、最上位クラスに対してはサポートしていません。
最上位クラス: Java プロジェクトでは、各 Java ソース ファイルに複数の最上位クラスを含めることができます。クラスの 1 つは、ファイル名に基づいて命名されています。最上位クラスpublic、abstract、および finalの前で使用できるオプションまたはキーワードは 3 つだけです。
内部クラス:最上位クラスの内部にあるクラスは内部クラスと呼ばれます。これは、基本的にネストされたクラスの概念です。内部クラスは static にすることができます。内部クラスを静的にするという考え方は、最上位クラスのオブジェクトをインスタンス化せずに、内部クラスのオブジェクトをインスタンス化するという利点を利用することです。これは、静的メソッドと変数が最上位クラス内で機能するのとまったく同じ方法です。
したがって、Java は内部クラス レベルで (ネストされたクラスで) 静的クラスをサポートします。
また、Java は最上位クラスで静的クラスをサポートしていません。
これにより、Java の静的クラスの基本的な理解に関する質問に対する簡単な解決策が得られることを願っています。
Javaに静的クラスのようなものはありますか?
シングルトンは静的クラスに「似ています」。まだ誰も言及していないことに驚いています。
public final class ClassSingleton {
private static ClassSingleton INSTANCE;
private String info = "Initial info class";
private ClassSingleton() {
}
public static ClassSingleton getInstance() {
if(INSTANCE == null) {
INSTANCE = new ClassSingleton();
}
return INSTANCE;
}
// getters and setters
public String getInfo(){
return info;
}
}
使用法は次のようなものです。
String infoFromSingleton = ClassSingleton.getInstance().getInfo()
シングルトンは、ArrayLists/List/Collection Classes/etc の格納に最適です...複数の領域からコレクションを頻繁に収集、更新、コピーし、これらのコレクションを同期させる必要がある場合。または多対一。
Java にはクラスに関連付けられた静的メソッドがあります (たとえば、java.lang.Math には静的メソッドしかありません) が、クラス自体は静的ではありません。