[解決済み] Javaにおける静的クラス
2022-03-19 17:58:23
質問
のようなものはありますか?
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;
}
}
静的クラスは何の役に立つのか?
スタティック・クラスの良い使い方は、インスタンス化が意味をなさないような、一回限りのユーティリティ・クラスやライブラリ・クラスを定義することです。例えば、Math クラスは PI や E などの数学定数を持ち、単に数学的な計算を行うクラスです。このような場合にインスタンス化を要求することは、不必要であり、混乱を招くでしょう。次の例を見てください。
Math
クラスと
ソースコード
. であることに注意してください。
final
であり、そのすべてのメンバが
static
. Java でトップレベルクラスの宣言が許可されている場合
static
であれば、Mathクラスは確かにstaticになります。
関連
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
[解決済み] JavaでNullPointerExceptionを回避する方法
-
[解決済み] JavaBeanとは何ですか?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] Javaで数値を小数点以下n桁に丸める方法
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み】JSP 2を使用して、JSPファイル内のJavaコードを回避するにはどうすればよいですか?
-
[解決済み】静的なMapを初期化する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
javaで非静的な解を静的な参照にすることができない
-
コンストラクタの呼び出しは、コンストラクタのエラー理解の最初のステートメントである必要があります。
-
this()の呼び出しはコンストラクタ本体の最初の文でなければならない 例外解決と原因分析
-
マスキング このリソースにアクセスするには、完全な認証が必要です。
-
spring aop アドバイスからの Null 戻り値が、サマリーのプリミティブ戻り値と一致しない。
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
スレッド "main" で例外発生 java.net.BindException: アドレスは既に使用中です。NET_Bind
-
[解決済み] Java Enum return Int
-
[解決済み] Javaにおける "final class "の意味とは?
-
[解決済み] なぜJavaではクラスをstaticとして宣言できないのですか?