1. 程式人生 > >java類的延遲初始化及其特性

java類的延遲初始化及其特性

jvm通過classLoader來加在編譯生成class檔案。來生成可操作的java類檢視。

但是java並不是在一開始的時候就將會將程式中所有的class檔案都載入起來。而是在需要的時候可以動態載入,這給java帶來了更多的靈活性。像從網路的下載的class檔案可以在程式執行的過程中動態的載入,或者執行時的安全的型別轉換。這是c++這種靜態編譯語言所無法實現的。

當然動態載入也有其缺點,比如慢啟動,執行的過程中對class檔案的載入編譯拖慢了整個程式的執行速度(相當於把部分編譯時的工作轉移到執行時來做這就是所謂的動態編譯即 java jit),所以在程式執行一段時間後才能完全展示其效能。

下面的情況會觸發class的load過程:

初始化一個類,包括執行這個類的靜態初始化和初始化在這個類中宣告的靜態欄位。根據java語言規範,在首次發生下列任意一種情況時,一個類或介面型別T將被立即初始化:

  • T是一個類,而且一個T型別的例項被建立;
  • T是一個類,且T中宣告的一個靜態方法被呼叫(初始化函式雖然未宣告,但確實是一個靜態函式,參自-java程式設計思想14章 型別資訊);
  • T中宣告的一個靜態欄位被賦值;
  • T中宣告的一個靜態欄位被使用,而且這個欄位不是一個常量欄位;
  • T是一個頂級類(top level class,見java語言規範的§7.6),而且一個斷言語句巢狀在T內部被執行。
未完.....待續