「こんにちは、アミーゴ! リシが何か新しくて刺激的なことを説明してくれたと聞きました?!」
「その通りです、キムさん」
「私のトピックも同様に興味深いものになります。クラスがどのようにメモリにロードされるかについてお話したいと思います。」
Java のクラスは、コンパイルされた Java コードであるバイトコードを含むディスク上のファイルです。
"はい。覚えています。"
Java マシンは、必要がない場合にはそれらをロードしません。コード内のどこかでクラスへの呼び出しがあるとすぐに、Java マシンはそのクラスがロードされているかどうかを確認します。そうでない場合は、ロードして初期化します。
クラスの初期化には、そのすべての静的変数に値を割り当て、すべての静的初期化ブロックを呼び出すことが含まれます。
「それは、オブジェクトのコンストラクターを呼び出すのと似ているように思えます。しかし、静的初期化ブロックとは何ですか?」
「オブジェクトを初期化するために複雑なコード (たとえば、ファイルから何かをロードする) を実行する必要がある場合は、コンストラクターで実行できます。ただし、静的変数にはそのような機会がありません。しかし、必要性は依然として残っているため、次のように実行できます。静的初期化ブロックをクラスに追加します。それらは基本的に静的コンストラクターと同等です。」
見た目はこんな感じです。
コード | 本当に何が起こるのか |
---|---|
|
|
これは、コンストラクターが呼び出されたときに起こることとよく似ています。(存在しない) 静的コンストラクターとしてそれを書いたこともあります。
"うん、分かった。"
"とても良い。"