測(cè)試代碼:
//父類
public class Base {
private int i = print("父類普通變量 i ");
private static int j = print("父類靜態(tài)變量 j");
static {
System.out.println("父類靜態(tài)代碼塊");
}
{
System.out.println("父類普通代碼塊");
}
public Base() {
System.out.println("父類構(gòu)造方法");
}
static int print(String str) {
System.out.println(str);
return 2;
}
}
//子類
public class Son extends Base{
private int k = print("子類普通變量k");
private static int l = print("子類靜態(tài)變量l");
static {
System.out.println("子類靜態(tài)代碼塊");
}
{
System.out.println("子類普通代碼塊");
}
public Son() {
System.out.println("子類構(gòu)造方法");
}
static int print(String str) {
System.out.println(str);
return 2;
}
}
//測(cè)試類
public class main {
public static void main(String[] args) {
Son son = new Son();
}
}
?輸出結(jié)果:
修改一下兩個(gè)類中靜態(tài)代碼塊和靜態(tài)成員變量的位置并重新運(yùn)行
//父類
public class Base {
static {
System.out.println("父類靜態(tài)代碼塊");
}
{
System.out.println("父類普通代碼塊");
}
public Base() {
System.out.println("父類構(gòu)造方法");
}
static int print(String str) {
System.out.println(str);
return 2;
}
private int i = print("父類普通變量 i ");
private static int j = print("父類靜態(tài)變量 j");
}
//子類
public class Son extends Base{
static {
System.out.println("子類靜態(tài)代碼塊");
}
{
System.out.println("子類普通代碼塊");
}
public Son() {
System.out.println("子類構(gòu)造方法");
}
static int print(String str) {
System.out.println(str);
return 2;
}
private int k = print("子類普通變量k");
private static int l = print("子類靜態(tài)變量l");
}
?輸出結(jié)果:
測(cè)試結(jié)果:
?由測(cè)試結(jié)果可知:程序首先加載類诀浪,然后再對(duì)類進(jìn)行初始化于个。
?加載類的順序?yàn)椋?strong>先加載基類,基類加載完畢后再加載子類缭保。
?初始化的順序?yàn)椋?strong>先初始化基類遥缕,基類初始化完畢后再初始化子類侥祭。
?最后得出類加載順序?yàn)?/strong>:先按照聲明順序初始化基類靜態(tài)變量和靜態(tài)代碼塊蓖宦,接著按照聲明順序初始化子類靜態(tài)變量和靜態(tài)代碼塊齐婴,而后按照聲明順序初始化基類普通變量和普通代碼塊,然后執(zhí)行基類構(gòu)造函數(shù)球昨,接著按照聲明順序初始化子類普通變量和普通代碼塊尔店,最后執(zhí)行子類構(gòu)造函數(shù)。