Java中的初始化過程
阿新 • • 發佈:2018-12-25
Java中變數初始化順序:
1.靜態變數在類載入時初始化
2.將分配給物件的儲存空間初始化成二進位制的0,即先將所有的非靜態成員變數初始化成0
3.如果有父類,先呼叫父類構造方法
4.按照宣告的順序呼叫初始化成員變數
5.呼叫子類的構造方法主體
具體例子可以看下面這段程式碼:
public class InitOrder {
public static void main(String[] args) {
new Circle();
}
}
class Shape{
public Shape(){
System.out.println("Shape構造方法" );
print();
System.out.println("Shape構造方法");
}
public void print(){
System.out.println("父類");
}
}
class Circle extends Shape{
private int i = 1;
private static int j = 1;
public Circle(){
super(); // 這裡會預設呼叫父類構造
System.out.println("Circle構造方法" );
print();
System.out.println("Circle構造方法");
}
public void print(){
System.out.println("子類,i=" + i + ",j=" + j);
}
}
輸出結果:
在子類初始化時,靜態變數先初始化(j=1);非靜態變數初始化為0(i=0)。然後在呼叫子類構造方法前先呼叫父類構造方法,而父類構造方法中有一個多型方法,此時i=0,j=1。父類構造呼叫完後,成員變數按宣告順序初始化,此時i=1,j=1。