Java初期化とクリーンアップ
2550 ワード
呼び出し順序:JAVAクラスが最初に読み込まれると、静的メンバー変数またはメソッドが一度初期化されますが、メソッドが呼び出されないと実行されません.静的メンバー変数と静的初期化ブロックレベルは同じで、非静的メンバー変数と非静的初期化ブロックレベルは同じです.
親の静的コードを初期化-->子の静的コードを初期化-->(インスタンスを作成するとき、インスタンスを作成しない場合は後で実行しない)親の非静的コードを初期化-->親の構造関数を初期化-->子の非静的コードを初期化-->子の構造関数を初期化
2、クラスはNew呼び出しで作成したときのみJAVAクラスローダにロードされる
3、クラスインスタンスを作成するときは、まず親子継承関係に従って初期化する
4、クラスインスタンスの作成時、まずブロック部分を初期化して先に実行し、それから構築方法である.次に、本クラスから継承するサブクラスの初期化ブロックが実行され、最後にサブクラスの構成方法5、クラス消去時には、まずサブクラス部分が消去され、次に親クラス部分1が消去. 親クラスの静的メンバーと静的初期化ブロックは、コードに現れる順に順次実行される. サブクラスの静的メンバーと静的初期化ブロックは、コードに現れる順に順次実行される. 親インスタンスメンバーとインスタンス初期化ブロックは、コードに表示される順序で順次実行されます. 親の構築方法5. サブクラスインスタンスメンバーとインスタンス初期化ブロックは、コードに現れる順に順次実行される. サブクラス構築方法
親の静的コードを初期化-->子の静的コードを初期化-->(インスタンスを作成するとき、インスタンスを作成しない場合は後で実行しない)親の非静的コードを初期化-->親の構造関数を初期化-->子の非静的コードを初期化-->子の構造関数を初期化
2、クラスはNew呼び出しで作成したときのみJAVAクラスローダにロードされる
3、クラスインスタンスを作成するときは、まず親子継承関係に従って初期化する
4、クラスインスタンスの作成時、まずブロック部分を初期化して先に実行し、それから構築方法である.次に、本クラスから継承するサブクラスの初期化ブロックが実行され、最後にサブクラスの構成方法5、クラス消去時には、まずサブクラス部分が消去され、次に親クラス部分1が消去. 親クラスの静的メンバーと静的初期化ブロックは、コードに現れる順に順次実行される. サブクラスの静的メンバーと静的初期化ブロックは、コードに現れる順に順次実行される. 親インスタンスメンバーとインスタンス初期化ブロックは、コードに表示される順序で順次実行されます. 親の構築方法5. サブクラスインスタンスメンバーとインスタンス初期化ブロックは、コードに現れる順に順次実行される. サブクラス構築方法
:
public abstract class Base {
//5、
public int age = getNumber(100);
//
// 1、 static int sage
static int sage = getNumber(50);
// 2、 static
static {
System.out.println("base static block");
}
{
System.out.println("base nonstatic block");
}
//6、
Base()
{
System.out.println(age);
System.out.println("base start");
draw();//
System.out.println("base end");
}
static int getNumber(int base) {
System.out.println("base.getNumber int" + base);
return base;
}
public void draw() {
System.out.println("base.draw");
}
}
public class InitializeOrder extends Base {
//7、
public int age = getNumber(1001);
//8、
private int _radius = getNumber(10);
//3、 static int sage
static int sage = getNumber(250);
//4、 static
static {
System.out.println("subclass static block");
}
{
System.out.println("subclass nonstatic block");
}
//9、
InitializeOrder(int radius) {
_radius = radius;
System.out.println(age);
System.out.println("initializeOrder initialized");
}
public void draw() {
System.out.println("initializeOrder.draw " + _radius);
}
/** */
/**
* @param args
*/
public static void main(String[] args) {
new InitializeOrder(1000);
}
}