記事のディレクトリ
クラスのロードタイミング(5種類)
仮想マシンは、クラスが最初にロードされる次の5つのケースをトリガーします
- 遭遇した
new
、getstatic
、setstatic
、invokestatic
バイトコード - java.lang.reflectの反射コールに基づく方法を使用してパッケージ
- クラスをロードする場合、親クラスをロードするために、その親クラスがロードされていない見つけます
- 仮想マシンが起動すると、あなたは(マスタークラスを指定する必要があり
main()
、仮想マシンは、このようなロードするようにクラスメソッド) - JDK 1.7動的言語のサポート、
java.lang.invoke.MethodHandle
最終的な分析結果の例は、ということであるREF_getStatic
、REF_setStatic
、REF_invokeStatic
場合メソッドハンドル、対応するクラスをロードします
クラスの初期化シーケンス
- 親クラスの
<clinit>
ブロック内のコード - サブクラスの
<clinit>
ブロックコード - 親クラスの
<init>
ブロック内のコード - サブクラスの
<init>
ブロックコード
clinitブロック静的変数静的のブロックを含む
初期化ブロックビルダーとメンバ変数を含むが