私はJAVAの初期化プロセスについていくつかの研究を行っています。参考資料は次のとおりです 。JVMでクラスがロードされて初期化されるとき
このページには次のルールがあります: 3) 静的フィールドへのアクセスが原因でクラスの初期化がトリガーされた場合、静的フィールドを宣言したクラスのみが初期化され、静的フィールドが参照されてもスーパークラスまたはサブクラスの初期化はトリガーされません。サブクラス、サブインターフェースのタイプ別、またはインターフェースの実装クラス別。
私は本当にその考えを理解していません。静的フィールドがサブ クラスによって参照される場合、このフィールドはもちろんサブ クラス オブジェクトを作成するか、サブ クラス オブジェクトによって割り当てられる必要があります。したがって、間違いなく Sub クラスの初期化がトリガーされます。
私の解釈の何が問題になっていますか?
編集:
- スーパークラスの静的初期化をトリガーします。
- static フィールドが final で、宣言時に static final フィールドが初期化される場合。この static final フィールドはコンパイル時の定数値であるため、クラスのロードも初期化も行いません。注意: static final フィールドが static ブロックで初期化された場合、このステートメントは保持されなくなります。