類載入時機

2021-08-01 05:46:28 字數 816 閱讀 1233

類的整個生命週期:

驗證,準備,解析又統稱連線。

載入,驗證,準備,初始化,解除安裝這5個階段總是按順序「開始」(而不是順序進行或者完成)

有且只有5種情況必須立即對類進行初始化

除了這5個場景,其他引用類的方式都不會觸發其初始化。如

在準備階段,變數被賦初始值

() 方法是由編譯器自動收集類中的所有類變數的賦值動作和static{}塊中的語句合併產生的,按原始檔**順序收集。

static{}塊中只能訪問定義在其之前的變數,定義在其後的變數可以賦值,但不能訪問。

()方法由虛擬機器保證其父類的()方法已經執行完畢。

()方法由虛擬機器保全其在多執行緒的情況下被正確的加鎖,同步,只有乙個執行緒會去執行初始化操作,其他的執行緒處於阻塞狀態。

public

class deadloopclass }}

}public

class testdeadloopclass

};thread t1 = new thread(script1);

thread t2 = new thread(script1);

t1.start();

t2.start();

}}

thread[thread-1,5,main]start

thread[thread-0,5,main]start

thread[thread-1,5,main]looping

thread[thread-1,5,main]looping

thread[thread-1,5,main]looping

靜態內部類載入時機

這兩天在學習設計模式,其中單例模式有種實現是通過靜態內部類方式實現,有些不可思議,故在此做個小實驗驗證一下靜態內部類的載入時機 public class teststatic public teststatic 內部類 class innerclass 靜態內部類 static class stat...

關於類名呼叫類中的常量時類的載入時機

源 如下 class father public void init static static class son extends father public class test 執行結果如下 讓我們來分析下流程 當主函式中 system.out.println father.f 這行 執行時,...

類初始化時機

虛擬機器規範中並沒有強制約束何時進行載入,但是規範嚴格規定了有且只有下列五種情況必須對類進行初始化 載入 驗證 準備都會隨之發生 以上 5 種場景中的行為稱為對乙個類進行主動引用。除此之外,所有引用類的方式都不會觸發初始化,稱為被動引用。被動引用的常見例子包括 system.out.println ...