[解決済み】静的初期化コードブロックと非静的初期化コードブロックの違いは何ですか?
質問
静的キーワードのある特定の使用方法について質問です。それは
static
キーワードは、どの関数にも属さないクラス内のコードブロックをカバーするために使用されます。例えば、次のようなコードがコンパイルできます。
public class Test {
private static final int a;
static {
a = 5;
doSomething(a);
}
private static int doSomething(int x) {
return (x+5);
}
}
を削除すると
static
キーワードを使用すると、変数
a
は
final
. しかし
final
と
static
というキーワードを入力し、コンパイルさせます。
どっちもどっちで困惑しています。どのメソッドにも属さないコードセクションをどのように持てばいいのでしょうか?どのようにそれを呼び出すことが可能なのでしょうか?一般的に、この使い方の目的は何ですか?あるいは、これに関するドキュメントはどこにあるのでしょうか?
どのように解決するのですか?
static修飾子がついたコードブロックは クラス イニシャライザー、static修飾子なしのコードブロックは インスタンス のイニシャライザーです。
クラス初期化子は、クラスがロードされたとき(実際には解決されたときですが、それは技術的な問題です)、定義された順番に(単純な変数初期化子と同じように、上から下に向かって)実行されます。
インスタンス初期化子は、クラスのインスタンス化時に定義された順序で、コンストラクタのコードが実行される直前、スーパーコンストラクタが呼び出された直後に実行されます。
を削除した場合
static
から
int a
この場合、インスタンス変数になり、スタティック・イニシャライザー・ブロックからアクセスすることはできません。この場合、コンパイル時に "非静的変数 a cannot be referenced from a static context" というエラーが出て失敗します。
また
static
はインスタンス・イニシャライザーになり、その結果
int a
は構築時に初期化されます。
関連
-
[解決済み] 環境変数JAVA_OPTSの使い方を教えてください。
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] StringBuilderとStringBufferの違いについて
-
[解決済み] wait()とsleep()の違いについて
-
[解決済み] Javaクラスにおけるcanonical name、simple name、class nameの違いは何ですか?
-
[解決済み] JDKとJREの違いは何ですか?
-
[解決済み】KotlinでJavaの静的メソッドに相当するものは何ですか?
-
[解決済み】C++におけるstaticキーワードとその様々な使用法
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] java.util.concurrent.ExecutionException 例外をどのように処理しますか?
-
[解決済み] android.support.v4.app.FragmentActivity' で 'TAG' がプライベートアクセスされている。
-
[解決済み] 最も近い整数への切り捨て - 私は不正をしているのでしょうか、それともこれは十分すぎるほど適切なのでしょうか?
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] javaでAnnotation Inheritanceのようなものはあるのでしょうか?
-
[解決済み] publicId と systemId の間に空白が必要です。
-
[解決済み] java swingアプリケーションでJCEがプロバイダBCを認証できない
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み】Javaのスタティックブロック【重複あり