當使用「.class」來建立對class對像的引用時,不會自動地初始化該class對像。為了使用類而做的準備工作實際包含三個步驟:
1、載入,這是由類載入器執行的。該步驟將查詢位元組碼(通常在classpath所指定的路徑中查詢,但這並非是必需的),並從這些位元組碼中建立乙個class對像。
2、鏈結。在鏈結階段將驗證類中的位元組碼,為靜態城分配儲存空間,並且如果必需的話,將解析這個類建立的對其它類的所有引用。
3、初始化。如果該類具有超類,則對其初始化,執行靜態初始化器和靜態初始化塊。
初始化被延遲到了對靜態方法(構造器隱式的是靜態的)或者非常數靜態域進行首次引用時才執行
例:
class shapedemo4
public class initbale2
}public class initbale3
}public class classinitialization
}
result::
after
47initializing initable
258initializing initable2
147initializing initable3
after
74從上面程式執行的結果可以看出初始化盡可能的實現「惰性」。從對sheapdemo4引用的建立中可以看到,當只使用.class語法來獲得對類的引用時不會引發初始化。但是,為了產生class引用,class.forname()立即就進行了初始化。
如果乙個static final值是「編譯期常量」,那麼這個值不需要對類進行初始化就可以被讀取,如果例子中的「static final int staticfinal = 47;」但是如果只是將乙個域設定為static或final時,還不足以確保這種行為,例如對「static int staticnonfinal=147;」進行訪問時將強制進行初始化,因為它不是乙個編譯期常量。
如果乙個static域不是final的,那麼在對它訪問時,總是要求在它被讀取之前,要先進行鏈結(即為這個域分配儲存空間)和初始化(初始化該在儲存空間),例如對initable.staticnonfinal的訪問中所看到的結果。
第一次部落格,基本按書上意思轉達。因自己寫作水平有限,請朋友們多多指教,以後會抽更多的時間記錄。
移植前的準備工作
移植前首先要了解一下以下幾個基本概念及其作用 1 link的cmd檔案的作用 該檔案用於dsp 的定位,由於dsp的編譯器的編譯結果是未定位的,dsp沒有作業系統 os 定位執行 需要使用者自己定義 的安裝位置。cmd檔案由3部分組成 lib檔案 鏈結器要連線的庫檔案 map檔案 鏈結器生成的交叉索...
學習Vue 的準備工作
環境準備 1 首先從官網node v,如果出現對應版本號,則表示安裝成功。2 npm是隨同node.js一起安裝的包管理工具,直接在命令列敲出npm v就可以檢視是否安裝成功。在命令列敲出npm install g cnpm registry 安裝就可以了 4 安裝webpack npm insta...
爬蟲前的準備工作
個人建議在學習爬蟲之前,可以簡略看一下url,http協議,web前端,html,css,js,ajax,re,xpath,xml等知識,看完這些知識或許還不是透徹,這也不是很重要,但最起碼要看得懂網頁原始碼。注意事項 易給伺服器帶來巨大的負擔,請盡可能robots協議,一般在對方 的根目錄下有ro...