Java 靜態語句塊 語句塊 建構函式

2021-08-26 00:18:54 字數 903 閱讀 7846

以下是一道筆試題:

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 ...