java 程式碼載入順序
阿新 • • 發佈:2018-11-02
例子:
class
X{
Y y=
new
Y();
public
X(){
System.out.print(
"X"
);
}
}
class
Y{
public
Y(){
System.out.print(
"Y"
);
}
}
public
class
Z
extends
X{
Y y=
new
Y();
public
Z(){
System.out.print(
"Z"
);
}
public
static
void
main(String[] args) {
new
Z();
}
}
初始化過程: 1. 初始化父類中的靜態成員變數和靜態程式碼塊 ; 2. 初始化子類中的靜態成員變數和靜態程式碼塊 ; 3.初始化父類的普通成員變數和程式碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變數和程式碼塊,再執行子類的構造方法; (1)初始化父類的普通成員變數和程式碼塊,執行 Y y=new Y(); 輸出Y (2)再執行父類的構造方法;輸出X (3) 初始化子類的普通成員變數和程式碼塊,執行 Y y=new Y(); 輸出Y (4)再執行子類的構造方法;輸出Z 所以輸出YXYZ
例子:
class
X{
Y y=
new
Y();
public
X(){
System.out.print(
"X"
);
}
}
class
Y{
public
Y(){
System.out.print(
"Y"
);
}
}
public
class
Z
extends
X{
Y y=
new
Y();
public
Z(){
System.out.print(
"Z"
);
}
public
static
void
main(String[] args) {
new
Z();
}
}
初始化過程: 1. 初始化父類中的靜態成員變數和靜態程式碼塊 ; 2. 初始化子類中的靜態成員變數和靜態程式碼塊 ; 3.初始化父類的普通成員變數和程式碼塊,再執行父類的構造方法; 4.初始化子類的普通成員變數和程式碼塊,再執行子類的構造方法; (1)初始化父類的普通成員變數和程式碼塊,執行 Y y=new Y(); 輸出Y (2)再執行父類的構造方法;輸出X (3) 初始化子類的普通成員變數和程式碼塊,執行 Y y=new Y(); 輸出Y (4)再執行子類的構造方法;輸出Z 所以輸出YXYZ