static程式碼塊、成員變數初始化、構造方法執行順序
阿新 • • 發佈:2019-01-07
下面程式碼:
public class Son{
Father father = new Father();
static{
System.out.println("Son static");
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()" );
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
結果:
Son static
Father static
Father()
Son()
結論
先執行static程式碼塊,再初始化成員變數,再執行構造方法。
下面程式碼:
public class Son extends Father{
//Father father = new Father();
static{
System.out.println("Son static" );
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()");
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
結果:
Father static
Son static
Father()
Son()
結論
先執行父類的static程式碼塊,再執行子類static,再執行構造方法。
下面程式碼:
public class Son extends Father{
Father father = new Father(1);
static{
System.out.println("Son static");
}
public Son(){
System.out.println("Son()");
}
}
public class Father {
static{
System.out.println("Father static");
}
public Father(){
System.out.println("Father()");
}
public Father(int a){
System.out.println("Father(1)");
}
}
public class Main{
public static void main(String[] args){
Son son = new Son();
}
}
結果:
Father static
Son static
Father()
Father(1)
Son()
結論
先執行父類的static程式碼塊,再執行子類static,再執行父類構造方法,再再初始化成員變數,再走子類構造方法剩下的。