類載入的三個準備工作

2021-07-11 17:15:18 字數 1123 閱讀 3218

當使用「.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...