父類 子類 動態代碼塊 靜態代碼塊 構造函數 執行順序


執行順序對於靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序以此是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器
第一種情形

父類和子類 都有動態代碼塊和靜態快時


父類和子類 都有動態代碼塊和靜態快時
class Father {
{
System.out.println("父類構造塊");// 3
}
static {
System.out.println("父類靜態塊");// 1
}
}

public class Lianxi14 extends Father {
{
System.out.println("子類構造塊");// 4
}
static {
System.out.println("子類靜態塊");// 2
}
public static void main(String[] args) {
new Lianxi14();
}
輸出結果爲:

父類靜態塊
子類靜態塊
父類構造塊
子類構造塊
第二種情形
在父類和子類中加入構造函數
class Father {
{
System.out.println("父類構造塊");// 3
}
static {
System.out.println("父類靜態塊");// 1
}

Father() {
System.out.println("父類構造函數");//4
}
}

public class Lianxi14 extends Father {
{
System.out.println("子類構造塊");// 5
}
static {
System.out.println("子類靜態塊");// 2
}

Lianxi14() {
System.out.println("子類構造函數");//6
}

public static void main(String[] args) {
new Lianxi14();
}

}

執行順序如下:

父類靜態塊
子類靜態塊
父類構造塊
父類構造函數
子類構造塊
子類構造函數

2013。9.22 阿里筆試題
public class Ali {

private static int k = 0;private static Ali t3;
private static Ali t1 = new Ali("t1");
private static Ali t2 = new Ali("t2");
private static int i = print("i");
private static int n = 99;
{
print("構造塊");
}
static {
print("靜態塊");
}

public Ali(String s) {
System.out.println(++k + ":" + s + "   i:" + i + "   n:" + n);
}

private static int print(String s) {
System.out.println(++k + ":" + s + "   i:" + i + "   n:" + n);
n++;
return ++i;
}

public static void main(String[] args) {
Ali t = new Ali("init");
}

}
執行順序:
1:構造塊   i:0   n:0
2:t1   i:1   n:1
3:構造塊   i:1   n:1
4:t2   i:2   n:2
5:i   i:2   n:2
6:靜態塊   i:3   n:99
7:構造塊   i:4   n:100
8:init   i:5   n:101



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章