是不是因为父类编译时会生成常量,而子类在使用时已经有常量了,不需要再对父类进行加载。
クラスの静的コード ブロックと静的定数ライトの使用は、クラスの読み込みには依存しません。つまり、クラスの静的変数を使用しても、そのクラスのロードはトリガーされません。
サブクラスをロードすると、必ず親クラスがロードされます。 JVM のロード シーケンスでは、最初に親クラスをロードし、次にサブクラスを初期化する必要があります。
私の記憶が正しければ、親クラスの静的変数 - 親クラスの静的コード ブロック - サブクラスの静的変数 - サブクラスの静的コード ブロックの順です。 順番を間違って覚えていたかもしれません。
サブクラスをロードすると、最初に親クラスがロードされます以下のコードを書きました: Super
サブ
出力は次のとおりです:
超
アウトメイン12
親クラスがロードされます。あなたが話している問題は何ですか?
補足:
実行結果:
注:
定数から最後の部分を削除すると、結果は次のようになります:
jdk1.8これが発生する理由は、final が不変であるためにコンパイル時に最適化され、コンパイル後に定数プール内の文字列を直接指すためです。で。
クラスの静的コード ブロックと静的定数ライトの使用は、クラスの読み込みには依存しません。つまり、クラスの静的変数を使用しても、そのクラスのロードはトリガーされません。
リーリーサブクラスをロードすると、必ず親クラスがロードされます。
JVM のロード シーケンスでは、最初に親クラスをロードし、次にサブクラスを初期化する必要があります。
私の記憶が正しければ、親クラスの静的変数 - 親クラスの静的コード ブロック - サブクラスの静的変数 - サブクラスの静的コード ブロックの順です。 順番を間違って覚えていたかもしれません。
サブクラスをロードすると、最初に親クラスがロードされます
リーリー以下のコードを書きました:
Super
サブ
リーリー出力は次のとおりです:
アウトメイン
1
2
親クラスがロードされます。あなたが話している問題は何ですか?
補足:
リーリー実行結果:
リーリー注:
リーリー定数から最後の部分を削除すると、結果は次のようになります:
リーリーjdk1.8
これが発生する理由は、final が不変であるためにコンパイル時に最適化され、コンパイル後に定数プール内の文字列を直接指すためです。で。