クラスの初期化(静的な部分)
Clinit実行方法
- 主な方法 が必要でクラスをロードして初期化するために、
- 親クラスを初期化するために、サブクラスの必要性を初期化します
- クラスポイントに初期化される<clinit>()メソッド
①、<clinit>()静的による方法 表示変数割り当てクラスコード とコードの静的ブロック からなる
②、クラス変数および静的コードブロックコードに割り当てられた符号表示 (底注文執行の上からの< cliinit方法>()の実行順序)
③、<clinit>()メソッドは、 一度だけ実行されます
例としては、初期化(非静的な部分)
初期の例は、(すなわち、上記初期化clinitクラス)<INIT>方法を行います
- <初期化>()メソッドがオーバーロードを複数有していてもよく、いくつかのコンストラクタは、いくつかの<init>方法が有しています
- <初期化>()メソッドは、組成物に対応するブロックの非静的および非静的インスタンス変数、構成コードによって割り当てコードブロックを表示します
- 非静的インスタンス変数と最後の構成コードの実行に対応する、上から下へ符号の符号割当ブロック非静的順次実行を表示します
- 各インスタンスを作成し、対応するコンストラクタは、<初期化>()メソッドに対応して行われる呼び出し
- 最初の行の<init>()メソッドは、スーパー()やスーパー(引数パラメータリスト)である親クラスに対応した<init>()メソッド
バイトコードファイル:
分析の例:
次の出力息子のクラスを実行するための主な方法は何ですか?
Father.javaファイル
public class Father{ private int i = test(); private static int j = method(); static{ System.out.print("(1)"); } Father(){ System.out.print("(2)"); } { System.out.print("(3)"); } public int test(){ System.out.print("(4)"); return 1; } public static int method(){ System.out.print("(5)"); return 1; } }
Son.javaファイルがどのような次のコードの意志の出力を実行しますか?
public class Son extends Father{ private int i = test(); private static int j = method(); static{ System.out.print("(6)"); } Son(){ // super();//写或不写都在,在子类构造器中一定会调用父类的构造器 System.out.print("(7)"); } { System.out.print("(8)"); } public int test(){ System.out.print("(9)"); return 1; } public static int method(){ System.out.print("(10)"); return 1; } public static void main(String[] args) { // Son s1 = new Son(); // System.out.println(); // Son s2 = new Son(); } }
結果