Class.forName("Gum");
forName是取得Class引用的一種方法,返回一個(gè)Class對(duì)象的引用。
如果Gum類還沒有被加載就加載它,在加載過程中,Gum的靜態(tài)子句被執(zhí)行。
可能產(chǎn)生的異常:ClassNotFoundException
Class.getInterfaces("Gum")
返回對(duì)象是Class類型,表示類Gum包含的接口
如類Gum implements interface1,
則會(huì)獲取到interface1的類對(duì)象
Class.newInstance()
實(shí)現(xiàn)“虛擬構(gòu)造器”的一種途徑
類字面常量
obj.Class生成對(duì)Class對(duì)象的引用,它比forName更加安全,因?yàn)樗诰幾g時(shí)就接受檢查。
注意:當(dāng)使用.Class來創(chuàng)建Class對(duì)象的引用時(shí),不會(huì)自動(dòng)初始化Class對(duì)象。
輸出結(jié)果為:
Initialzing Initable After creating Initable ref 47 258 Initialzing Initable2 147 Initialzing Initable3 After creating Initable3 ref 74
結(jié)論:如果一個(gè)static final值是"編譯期常量",就象Initable.staticFinal那樣,那么這個(gè)值不需要對(duì)Initable類初使化就可以讀取,但是如果只是將一個(gè)域設(shè)置為static和final的,如對(duì)Initable.staticFinal2的訪問將進(jìn)行強(qiáng)制的初使化,因?yàn)樗皇且粋€(gè)編譯型常量。
如果一個(gè)static而不是final的,那么在它訪問時(shí),總是要求進(jìn)行鏈接(為這個(gè)域分配存儲(chǔ)空間)和初始化(初始化該存儲(chǔ)空間),就像對(duì)Initable2.staticNonFinal那樣。
泛化的Class引用
Class<Integer> iniClass=int.class
新的轉(zhuǎn)型語法
case()
InstanceOf
反射
getMethods()返回Method對(duì)象的數(shù)組
getConstructors()返回Contructor對(duì)象的數(shù)組
動(dòng)態(tài)代理
實(shí)現(xiàn)InvocationHandler接口
public Object invoke(Objct proxy,Method method,Object[] args)throws Throwable{}方法
通過Proxy.newProxyInstance(ClassLoader,Class[],InvocationHandler)創(chuàng)建動(dòng)態(tài)代理
具體示例參見:
http://www.tkk7.com/aoneany/articles/271019.html
Powered by: BlogJava Copyright © 沙漠中的魚