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