//主函數
package?com.java.CarRent;
public??class?Initial?{
????public?static?void?main(String[]?args)?{
????????Son?s=new?Son();
????}
}
//Parent?類
package?com.java.CarRent;
public?class?Parent?{
????{
????????System.out.println("A");
????}
????static{
????????System.out.println("B");
????}
????public?Parent(){
????????System.out.println("C");
????}
}
//Son?類
package?com.java.CarRent;
public?class?Son?extends?Parent{
????{
????????System.out.println("D");
????}
????static{
????????System.out.println("E");
????}
????public?Son(){
????????System.out.println("F");
????}
????}
//能不能解釋一下答案?,關鍵是其中的static初始化沒理解

2018-06-11
在一個不存在繼承的類中:初始化static變量,執行static初始化快-->初始化普通成員變量(如果有賦值語句),執行普通初始化塊-->構造方法
在一個存在繼承的類中:初始化父類static成員變量,運行父類static初始化塊-->初始化子類static成員變量,運行子類static初始化塊-->初始化父類實例成員變量(如果有賦值語句),執行父類普通初始化塊-->父類構造方法-->初始化子類實例成員變量(如果有賦值語句)及普通初始化塊-->子類構造方法。
注意:其中變量初始化(賦值)和初始化塊的執行與相關語句在源碼中的放置順序一致,不過變量聲明會最先執行
2018-07-31
不懂的{}這個的,再補充下剛弄懂
static{...}是靜態塊,而只有{...}的是叫做構造塊。
? ? 靜態塊在一個程序里面只執行一次;
? ? 而構造塊是,只要建立一個對象,構造代碼塊都會執行一次。
? ? 靜態塊優先于主方法的執行,靜態塊優先于構造快,然后是構造方法的執行,而且只執行一次!
????