.class和class.forname 隨筆
阿新 • • 發佈:2018-11-07
class.forname() 這個方法class類的一個static成員。class物件就和其他的物件一樣,我們可以獲取並操作他的引用(也是類載入器的工作)。forname()是取得class物件的引用的一種方法。它是用一個包含目標類的文字名的string作輸入引數,返回的是一個class物件的引用。對forname()呼叫是為了它產生的副作用;如果類還沒被載入就載入他,在載入過程中,這個類的static子句會被執行。class.forname(“top.fancytoy”)
java還提供了另一種方法來生成對class物件的引用,即用類字面常量。對上面的那個來說也可以fancytoy.class;來獲取引用。
這樣做不僅更簡單,而且更安全,因為它在編譯時就會受到檢查。類字面常量不僅可以應用於普通的類,也可以應用於介面,陣列以及基本的資料型別。但是當使用.class來建立class物件的引用時,不會自動的初始化該類的class物件。為了使用類而做的準備工作實際包含三個步驟:
1:載入、這個是由類載入器執行的。該步驟將查詢位元組碼(通常在classpath所指定的路徑中查詢,但這並非是必須的),並從這些位元組碼中建立一個class物件。
2:連結、在連結階段將驗證類中的位元組碼,為靜態域分配儲存空間,並且如果必須的話,將解析這個類建立的對其它類的所有引用。
3:初始化、如果該類具有超類,則對其初始化,執行靜態初始化器和靜態初始化塊。