abstract class base
{
public int age=getNumber(100);
static
{
System.out.println("base static block");
}
{
System.out.println("base nonstatic block");
}
static int sage=getNumber(50);
base()
{
System.out.println(age);
System.out.println("base start");
draw();//會調(diào)用子類覆蓋后的方法
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{
public int age=getNumber(1001);
private int _radius=getNumber(10);
static int sage=getNumber(250);
static
{
System.out.println("subclass static block");
}
{
System.out.println("subclass nonstatic block");
}
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) {
// TODO Auto-generated method stub
new initializeOrder(1000);
}
}
運(yùn)行結(jié)果:
C:\java>java initializeOrder
base static block
base.getNumber int50
base.getNumber int250
subclass static block
base.getNumber int100
base nonstatic block
100
base start
initializeOrder.draw 0
base end
base.getNumber int1001
base.getNumber int10
subclass nonstatic block
1001
initializeOrder initialized
C:\java>
總結(jié):
1、類只有在使用New調(diào)用創(chuàng)建的時(shí)候才會被JAVA類裝載器裝入
2、JAVA類首次裝入時(shí),會對靜態(tài)成員變量或方法進(jìn)行一次初始化,但方法不被調(diào)用是不會執(zhí)行的,靜態(tài)成員變量和靜態(tài)初始化塊級別相同,非靜態(tài)成員變量和非靜態(tài)初始化塊級別相同。
先初始化父類的靜態(tài)代碼--->初始化子類的靜態(tài)代碼-->
初始化父類的非靜態(tài)代碼--->初始化父類構(gòu)造函數(shù)--->
初始化子類非靜態(tài)代碼--->初始化子類構(gòu)造函數(shù)
3、創(chuàng)建類實(shí)例時(shí),首先按照父子繼承關(guān)系進(jìn)行初始化
4、類實(shí)例創(chuàng)建時(shí)候,首先初始化塊部分先執(zhí)行,然后是構(gòu)造方法;然后從
本類繼承的子類的初始化塊執(zhí)行,最后是子類的構(gòu)造方法
5、類消除時(shí)候,首先消除子類部分,再消除父類部分