java面試之程式初始化

2021-06-27 00:46:11 字數 1144 閱讀 3588

可以看出,都是先初始化靜態在初始化其他,(先初始化父類再初始化子類,)先初始化變數再初始化構造器

(1) 訪問subclass.main(),(這是乙個static方法),於是裝載器就會為你尋找已經編譯的subclass類的**(也就是subclass.class檔案)。在裝載的過程中,裝載器注意到它有乙個基類(也就是extends所要表示的意思),於是它再裝載基類。不管你創不建立基類物件,這個過程總會發生。如果基類還有基類,那麼第二個基類也會被裝載,依此類推。

(2) 執行根基類的static初始化,然後是下乙個派生類的static初始化,依此類推。這個順序非常重要,因為派生類的「static初始化」有可能要依賴基類成員的正確初始化。

(3) 當所有必要的類靜態變數或靜態初始化塊都已經裝載結束,開始執行

main()

方法體,並用new subclass()建立物件。

(4) 類subclass存在父類,則呼叫父類的建構函式,你可以使用super來指定呼叫哪個建構函式(也就是beetle()建構函式所做的第一件事)。基類的構造過程以及構造順序,同派生類的相同。首先基類中各個變數按照字面順序進行初始化,然後執行基類的建構函式的其餘部分。

(5) 對子類成員資料按照它們宣告的順序初始化,執行子類建構函式的其餘部分。

class insect 

static int x1 = prt("static insect.x1 initialized");

static int prt(string s)

}public class helloworld2 extends insect

static int x2 = prt("static beetle.x2 initialized");

static int prt(string s)

public static void main(string args)

}

最後執行結果:

static insect.x1 initialized

static beetle.x2 initialized

beetle constructor

i = 9, j = 0

beetle.k initialized

k = 63

j = 39

Java程式初始化順序

靜態優先於非靜態。具體指的是靜態的變數或者是物件優先於非靜態的變數或者是物件。並且,靜態只初始化一次,而非靜態可能會初始化多次。父類優先於子類進行初始化。按照成員變數定義的順序進行初始化,並且成員變數優先成員方法。上面說的可能有點抽象,也不能快速的進行判斷,下面是在真正的程式中初始化的順序 父類靜態...

Java 程式初始化過程

之前應聘筆試的時候,遇到過很多次,給出一段 裡面有static靜態變數,static 塊以及建構函式等,在它們初始化或者是 塊中設定列印log,然後問它們的列印順序。再此之前一直不知道具體考察的是什麼,好在現在終於知道了,考察的是程式的初始化過程。那麼程式的初始化過程是怎樣的呢?main方法執行的時...

初始化 MyBatis初始化之載入初始化

在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...