反射的操作,都是編譯后的操作,對.class文件的操作;
編譯是去泛型的;Java中泛型是防止輸入錯誤的,只在編譯階段有效,編譯之后,就沒有了泛型;
利用反射可以繞過編譯中的類型判斷過程
編譯是去泛型的;Java中泛型是防止輸入錯誤的,只在編譯階段有效,編譯之后,就沒有了泛型;
利用反射可以繞過編譯中的類型判斷過程
2015-01-15
Class int1=int.class;
Class String1=String.class; //String類的類 類型 String類字節碼:編譯后的文件-->字節碼:類名.class
Class String1=String.class; //String類的類 類型 String類字節碼:編譯后的文件-->字節碼:類名.class
2015-01-15
編譯和運行是不同的:.java-->.class--->運行《機器碼》
靜態加載類:編譯時加載所有的,可能使用到的類,即使不用也要加載。100個類,一個有錯,全部報廢:也浪費時間
動態加載類:運行時加載類
靜態加載類:編譯時加載所有的,可能使用到的類,即使不用也要加載。100個類,一個有錯,全部報廢:也浪費時間
動態加載類:運行時加載類
2015-01-15
1:Class class1=Foo.class; ------->實際在告訴我們,任何一個類都有一個隱含的靜態成員變量
2: Class class2=foo1.getClass()---->已知該類的對象,通過該類的對象通過getClass方法
class1和class2表示Foo類的類 類型(class type) Foo這個類本身就是一個對象,Foo類的對象:
3:Class class3=null; class3=Class.forName();
class1==class2==class3
2: Class class2=foo1.getClass()---->已知該類的對象,通過該類的對象通過getClass方法
class1和class2表示Foo類的類 類型(class type) Foo這個類本身就是一個對象,Foo類的對象:
3:Class class3=null; class3=Class.forName();
class1==class2==class3
2015-01-15
我們可以通過類 類型創建該類的對象實例---->c1,c2,c3創建Foo的實例對象
Foo foo=(Foo)c1.newInstance();<須有無參的構造方法>
Foo foo=(Foo)c1.newInstance();<須有無參的構造方法>
2015-01-15
任何一個類都是Class的實例對象:3種表示方式
class Foo{}
Foo foo1=new Foo();
不能直接new Class()這個構造方法是私有的
class Foo{}
Foo foo1=new Foo();
不能直接new Class()這個構造方法是私有的
2015-01-15