Java中 clinit 和 init 區別

2021-09-16 12:04:59 字數 1249 閱讀 2407

在除錯的過程中,經常可以看到乙個初始化函式

它是這個樣子的

剛開始沒有注意,後來發現其實 其實就是這個類的建構函式

那麼又是什麼呢? 其實就這這個類的靜態**塊的集合

舉個例子吧,下面是乙個demo類。如果裡面沒有靜態**塊,就和下面一樣,只有簡單的靜態函式,那麼我們可以看一下

public

class

demo

public

static

void

main

(string[

] args)

}

加個斷點就可到乙個函式,指向了建構函式

當我們加上靜態函式塊,再來看

這裡的**首先進入的不是main函式,而是函式。

我們都知道靜態**塊只執行一次,並且是最先執行。可是有沒有想過為什麼呢?

其實這是由jvm規定的,在載入類的時候,jvm執行順序是載入->驗證->解析->初始化,在初始化的過程中,編譯器自動收集類中所有的變數賦值動作和靜態語句塊中的語句合併而成的類構造方法。 當時這個不是必須的,因為有些類沒有靜態構造方法。而初始化的過程只是在載入類的時候執行的,所以只會執行一次,並且是最開始執行。這也就解釋了為什麼靜態**塊最先執行。

以下是輸出結果

靜態**塊

開始執行主函式啦!

建構函式

Java讀取ini檔案

ini檔案如下所示 module 0 key num 2 redis key mon login redis node 192.168.144.119 6379 192.168.144.120 6379 polling 1 module 1 key num 2 redis key mon regis...

VC中讀寫INI檔案

在vc2015中讀寫ini檔案,檔案以ansi格式儲存,如果以utf 8儲存,可能會產生亂碼。lpctstr strfile t tchar value 255 讀鍵值 getprivateprofilestring t ui t button1 t default value,200,strfil...

VC中讀寫ini檔案

strtempa.getbuffer max path max path,c usefile usefile.ini file 使用strtempa中的內容.補充四點 1.ini檔案的路徑必須完整,檔名前面的各級目錄必須存在,否則寫入不成功,該函式返回 false 值.2.檔名的路徑中必須為 因為在...