java 類型信息 筆記

RTTI : RTTI(Run-Time Type Information),經過運行時類型信息程序可以使用基類的指針或引用來檢查這些指針或引用所指的對象的實際派生類型。java

java 使用CLass對象來執行RTTI,即便正在使用轉型的操做.
全部的類都是在第一次對其使用時,動態加載到jvm中,當建立第一個對類的靜態成員引用時,類被加載.
這個證實構造器也是靜態方法,只是沒有static關鍵字.所以,new關鍵字建立的對象也會被當作對類的靜態成員的引用.數組

Class.forName:返回與給定的字符串名稱相關聯類或接口的Class對象。
Class.forName是一個靜態方法,一樣能夠用來加載類。若是類尚未被加載就進行加載同時初始化類信息.markdown

forName這句話就是裝載類用的(new是根據加載到內存中的類建立一個實例,要分清楚)。
Class的newInstance方法是實現」虛擬構造器」的一種方式.虛擬構造器容許你聲明」我不知道你的類型,可是能夠正確的建立你本身」.newInstance調用的是無參構造方法,沒有則會報出異常.jvm

java 類字面常量 : 例如 A.clalss 做用 : 生成對Class對象的引用.能夠用於普通類還能夠用於接口,數組,基本類型. 字面常量對Class對象的引用不會自動初始化Class對象.spa

類的加載三步驟 :
1.加載 : 類加載器加載.class文件,並經過字節碼生成Class對象
2.連接 : 在連接階段驗證類中的字節碼,爲靜態域分配存儲空間,若是必須的話,解析這個類對其餘類的全部引用
3.初始化 : 若是該類具備超類,則對其進行初始化,而且執行靜態初始化器和靜態初始化塊.指針

在使用字面量常量時,若是一個值是static final」編譯期常量」.不須要對改類初始化就可讀取,若是隻是static和final之一,會先初始化後進行讀取.也就是說只是static不是final,那麼對它的訪問老是先連接,初始化該類再後才能讀取.
因此字符串常量應該儘可能寫成static finalcode

Class引用老是指向某一個Class對象,它能夠製做類的實例,幷包含可做用於該實例的全部方法代碼,包括靜態成員.
Class引用表示的就是它所指向的對象的確切類型,而該對象即是Class類的一個對象.orm

Class<?>因爲Class,幾遍他們是等價的.Class<?>能夠幫助進行類型檢查。對象

Class.cast()用於類型轉換 :
參數爲要轉型的對象,並 將其轉爲Class的引用類型
示例 :接口

class A {}
class B extends A {}

A a = new A();
CLass<B> classB = B.Class;
B b = classB.cast(a);
相關文章
相關標籤/搜索