執行順序:對於靜態變量、靜態初始化塊、變量、初始化塊、構造器,它們的初始化順序以此是(靜態變量、靜態初始化塊)>(變量、初始化塊)>構造器父類和子類 都有動態代碼塊和靜態快時
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