static class
Java に似たものはありますか?
このようなクラスの意味は何でしょうか? 静的クラスのすべてのメソッドもstatic
同様である必要がありますか?
逆の場合も同様に必要ですか? クラスに静的メソッドのみが含まれている場合、クラスも静的である必要がありますか?
静的クラスは何に役立ちますか?
ベストアンサー1
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 クラスは確かに静的になります。