[解決済み] Staticとfinalの違い?
質問
いつも迷うのは
static
と
final
のキーワードは
ジャワ
.
どのように違うのですか?
解決方法は?
static キーワードは、次の 4 つのシナリオで使用できます。
- 静的変数
- 静的メソッド
- 静的コードブロック
- 静的ネストされたクラス
まず、静的変数と静的メソッドについて見てみましょう。
静的変数
- オブジェクト(インスタンス)ではなく、クラスに属する変数です。
- 静的変数は、実行開始時に一度だけ初期化されます。これらの変数は、どのインスタンス変数の初期化よりも先に初期化されます。
- クラスのすべてのインスタンスで共有される単一のコピーです。
- 静的変数は、クラス名で直接アクセスでき、オブジェクトを必要としません。
-
シンタックス
Class.variable
静電方式
- オブジェクト(インスタンス)ではなく、クラスに属するメソッドです。
- 静的メソッドは、静的データにのみアクセスすることができます。そのクラスのインスタンスを持つ/作成しない限り、非静的データ (インスタンス変数) にアクセスすることはできません。
- 静的メソッドは、他の静的メソッドのみを呼び出すことができ、そのクラスのインスタンスを持っている/作成しない限り、そこから非静的メソッドを呼び出すことはできません。
- 静的メソッドは、クラス名で直接アクセスでき、オブジェクトを必要としません。
-
シンタックス
Class.methodName()
-
静的メソッドは、以下のものを参照することはできません。
this
またはsuper
というキーワードを使用します。
静的クラス
Javaには、quot;static nested classes"もあります。静的ネストクラスとは、外側のクラスのインスタンスへの参照を暗黙のうちに持たないクラスのことです。
静的ネストされたクラスは、インスタンスメソッドと静的メソッドを持つことができます。
Javaにはトップレベルの静的クラスというものは存在しません。
余談ですが
<ブロッククオート
メインメソッドは
static
インスタンス化が行われる前に、アプリケーションを実行するためにアクセス可能でなければならないからです。
final
キーワードは、後で変更することができない実体を定義するために、いくつかの異なる文脈で使用されます。
-
A
final
クラスはサブクラス化できません。これは、セキュリティと効率性の理由からです。したがって、Java標準ライブラリクラスの多くはfinal
は、例えばjava.lang.System
とjava.lang.String
. のすべてのメソッドはfinal
クラスは暗黙のうちにfinal
. -
A
final
メソッドをサブクラスでオーバーライドすることはできません。これは、クラスの機能または一貫性にとって重要である可能性のあるメソッドをサブクラスが変更することによる予期せぬ動作を防ぐために使用されます。 -
A
final
変数は、イニシャライザーか代入文のどちらかで一度だけ初期化することができます。宣言時に初期化する必要はありません。blank final
変数があります。同様に、空白の最終インスタンス変数は、それが宣言されたクラスのすべてのコンストラクタの最後で確実に代入されなければなりません。空白の最終静的変数は、それが宣言されたクラスの静的イニシャライザで確実に代入されなければなりません。そうしないと、どちらの場合もコンパイル時エラーが発生します。
注:変数が参照である場合、これは、その変数が他のオブジェクトを参照するために再バインドされないことを意味します。しかし、その変数が参照しているオブジェクトは、元々ミュータブルであれば、まだミュータブルです。
メソッド本体で無名内部クラスが定義されている場合、その内部クラスで宣言されたすべての変数が、メソッド本体で定義されたすべての変数と同じになります。
final
は、そのメソッドのスコープ内で内部クラスからアクセスできます。一度代入されたfinal変数の値は変更することができません。
関連
-
[解決済み】Ubuntu: OpenJDK 8 - パッケージを見つけることができません。
-
[解決済み] Java enumのメンバーを比較する:==またはequals()?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] Javaで配列を宣言し、初期化する方法は?
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み】HashMap、LinkedHashMap、TreeMapの違いについて
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】リンクリストの負の値の数でnegativeCntrを代入する
-
[解決済み】popBackStack()とreplace()の操作はどう違うのですか?
-
[解決済み】スレッド「main」での例外 java.lang.StringIndexOutOfBoundsException: 文字列のインデックスが範囲外です。0 [閉店]
-
[解決済み】 java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver [重複]。
-
[解決済み】JLabelのテキストを中央に配置するには?
-
[解決済み】Eclipseで「公開型 <<classname>> は独自のファイルで定義する必要があります」エラー【重複あり
-
[解決済み】破損したjarファイル
-
[解決済み】予期しない型エラー
-
[解決済み】Eclipseで「パッケージエクスプローラー」ビューが見つからない
-
[解決済み】フォルダに書き込もうとすると「java.nio.file.AccessDeniedException」が発生する件