Java初期化とクリーンアップ

2550 ワード

呼び出し順序:JAVAクラスが最初に読み込まれると、静的メンバー変数またはメソッドが一度初期化されますが、メソッドが呼び出されないと実行されません.静的メンバー変数と静的初期化ブロックレベルは同じで、非静的メンバー変数と非静的初期化ブロックレベルは同じです.
親の静的コードを初期化-->子の静的コードを初期化-->(インスタンスを作成するとき、インスタンスを作成しない場合は後で実行しない)親の非静的コードを初期化-->親の構造関数を初期化-->子の非静的コードを初期化-->子の構造関数を初期化
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); 
} 

}