RTTI:運(yùn)行時(shí)類型識別
運(yùn)行時(shí)類型識別使得你可以在程序運(yùn)行時(shí)發(fā)現(xiàn)和使用類型信息
在java中兑徘,主要有兩種方式可以在運(yùn)行時(shí)識別對象和類的信息的:
1.傳統(tǒng)的RTTI翎卓;
2.反射機(jī)制;
RTTI 和反射之間的區(qū)別:
對RTTI來說,編譯器在編譯時(shí)打開和檢查.class文件刃麸;
而對于反射機(jī)制來說,.class文件在編譯時(shí)是不可獲取的司浪,所以是在運(yùn)行時(shí)打開和檢查.class文件
類是程序的一部分泊业,每個(gè)類都有一個(gè)class對象。
類加載器:加載類的類型信息
所有的類都是在對其第一次使用時(shí)啊易,動態(tài)加載到JVM中的吁伺,當(dāng)程序創(chuàng)建第一個(gè)對類的靜態(tài)成員的引用時(shí),就會加載這個(gè)類租谈。
也就是說篮奄,Java程序在它運(yùn)行的時(shí)候,并不是被完全加載割去,而是必需時(shí)才加載的窟却。
JAVA SE5 提供了用于Class引用的轉(zhuǎn)型語法,即cast()方法呻逆,該方法接收參數(shù)對象夸赫,并將其轉(zhuǎn)型為Class引用的類型。
在java中咖城,可以使用instanceof來判斷是否是某特定類型的實(shí)例
接口可以隔里構(gòu)件茬腿,進(jìn)而降低耦合性。
問題:
反射在java中是用來支持其他特性的宜雀?
代理是基本的設(shè)計(jì)模式之一切平,它是你為了提供額外的或不同的操作,而插入的用來代替“實(shí)際”對象的對象辐董。揭绑?
java的動態(tài)代理?
標(biāo)記接口?
RTTI允許通過匿名基類的引用來發(fā)現(xiàn)類型信息他匪,初學(xué)者極易誤用菇存?