以下是一道筆試題:
package com.example;
public class parent
static
}
package com.example;
public class child extends parent
static
public static void main(string args)
}
請寫出上面程式的執行結果。
此題是考查靜態語句塊、語句塊以及建構函式的執行順序。
分析:物件的初始化順序:首先執行父類靜態的內容,父類靜態的內容執行完畢後,接著去執行子類的靜態的內容,當子類的靜態內容執行完畢之後,再去看父類有沒有非靜態**塊,如果有就執行父類的非靜態**塊,父類的非靜態**塊執行完畢,接著執行父類的構造方法;父類的構造方法執行完畢之後,它接著去看子類有沒有非靜態**塊,如果有就執行子類的非靜態**塊。子類的非靜態**塊執行完畢再去執行子類的構造方法。總之一句話,靜態**塊內容先執行,接著執行父類非靜態**塊和構造方法,然後執行子類非靜態**塊和構造方法。
而且子類的構造方法,不管這個構造方法帶不帶引數,預設的它都會先去尋找父類的不帶引數的構造方法。如果父類沒有不帶引數的構造方法,那麼子類必須用supper關鍵子來呼叫父類帶引數的構造方法,否則編譯不能通過。
因此執行結果是:
parent>>>>>>>>>>>3
child>>>>>>>>>>>3
parent>>>>>>>>>>>2
parent>>>>>>>>>>>1
child>>>>>>>>>>>2
child>>>>>>>>>>>1
Java 靜態語句塊 語句塊 建構函式執行順序
package test class parent static public parent class child extends parent static public child public class staticiniblockordertest 分析 物件的初始化順序 首先執行父類靜...
靜態語句塊 構造語句塊和建構函式的執行順序
public class a 非靜態 塊 靜態 塊 static public class bextends a 非靜態語句塊 靜態語句塊 static public static void main string args 執行結果 new兩次 public class bextends a 非靜...
靜態語句塊 構造語句塊以及建構函式的執行順序
class helloa static public class hellob extends helloa static public static void main string args 輸出 static astatic b main start i m a class helloa i ...