-
除了基本的數據類型、靜態成員不是對象,萬事萬物皆對象,而基本的數據類型可封裝為包裝類。 類是java.lang.class的對象 三種獲取類類型的表示方式: (1)通過隱含的靜態成員變量class Class c = Foo.class (2)通過對象實例的getClass方法 Class c = foo1.getClass() (3)通過Class中的forName方法 ,這個需要去捕獲異常 Class c = Class.forName("hello.xiaoxi.Foo") 通過類類型去創建對象實例: Foo f1 = (Foo)c.newInstance()查看全部
-
添加文檔注釋:alt+shift+j查看全部
-
double 是基本數據類型,而Double是double的包裝類 所以 Class c3=double.class //double的類類型,(跟c1類似) Class c4=Double.class //double類的類類型(跟c2類似)查看全部
-
類的加載的問題: 1.靜態加載:在我們編譯程序的時候屬于靜態加載 2.動態加載:在我們運行的時候屬于動態加載 相關的類 Class ,Method(該類可以獲取該類所有public的方法包括從父類繼承而來的) getReturnType() 得到方法的返回值類型的類類型 getName() 得到方法的名稱 getParameterTypes() 得到的是參數列表的類型的類類型查看全部
-
Java反射機制——通過反射了解集合泛型的本質 1:java中集合的泛型,只在編譯階段有效,用來限定輸入的,編譯之后是去泛型的。 2:反射的操作都是編譯之后的操作;就是運行階段; 3:java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦 我們可以通過方法的反射來操作,繞過編譯 eg: ArrayList list1=new ArrayList(); ArrayList<String> list2=new ArrayList<String>(); Class c1=list1.getClass(); Class c2=list2.getClass(); System.out.print(c1==c2);//true Method m=c2.getMethod("add",Object.class); m.invoke(list2,20);//向成功向list2集合中添加一個int 型的值;繞過編譯 當然是不能直接foreach list2集合的,會報類型轉換錯誤查看全部
-
動態加載類<br> 定義接口<br> interface OfficeAble{<br> public void start(); <br> }<br> class Word implements OfficeAble{<br> public static void start(){<br> System.out.println("word...starts");<br> }<br> }<br> 1.Class.forName("類的全稱")不僅表示了類得類類型,還代表了動態加載類<br><br> 編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載。<br><br> 2.new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類;<br> 一個錯誤就會導致編譯失敗,通過動態加載類可以解決這個問題<br><br> <br> OfficeAble oa=(OfficeAble)c.newInstance();//在此之前應該定義個接口Interface OfficeAble,并且讓子類實現它。<br><br> <br> OfficeBetter.java只用編譯一次,每次添加新的功能后只用編譯所用的接口實現類,然后運行“java OfficeBetter 類名” 。 <br> <br> 3.在線升級用的就是動態加載類。功能性的類,要使用動態加載,而不能使用靜態加載。查看全部
-
靜態加載與動態加載查看全部
-
類是java.lang.class的對象查看全部
-
1.Class.forName("類的全稱")不僅表示了類得類類型,還代表了動態加載類<br> 編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載。<br> 2.new 創建對象是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類; 一個錯誤就會導致編譯失敗,通過動態加載類可以解決這個問題<br> Class c = Class.forName(args[0]);<br> 通過類類型,創建該類對象。<br> OfficeAble oa=(OfficeAble)c.newInstance();//在此之前應該定義個接口Interface OfficeAble,并且讓子類實現它。<br> oa.start();<br> 。。。。在編譯時Word.java需要重新編譯,而OfficeBetter.java不需要,每次添加新的功能的時候只用編譯使用了接口的子類,然后運行時輸入 java OfficeBetter Word,這時oa是Word類<br> 3.在線升級用的就是動態加載類。功能性的類,要使用動態加載,而不能使用靜態加載。查看全部
-
1.Class類 1) 在面向對象的世界里,萬事萬物皆對象。(java語言中,靜態的成員、普通數據類型除外) 類是不是對象呢?類是(哪個類的對象呢?)誰的對象呢? 類是對象,類是java.lang.Class類的實例對象 2)這個對象到底如何表示 3 )Class.forName("類的全稱") 不僅表示了,類的類類型,還代表了動態加載類 請大家區分編譯、運行 編譯時刻加載類是靜態加載類、運行時刻加載類是動態加載類 4)基本的數據類型 void關鍵字 都存在類類型 5)Class類的基本API操作 2.方法的反射 1)如何獲取某個方法 方法的名稱和方法的參數列表才能唯一決定某個方法 2)方法反射的操作 method.invoke(對象,參數列表) 3)為什么要用方法的反射 why?指定方法名稱調用方法 舉個實際應用的案例 ---->通過標準JavaBean的屬性名獲取其屬性值 BeanUtil類 4)通過Class,Method來認識泛型的本質查看全部
-
驗證:我們可以通過方法的反射來操作,繞過編譯 Method m = c2.getMethod("add",object.class); m.invoke(list1,12);//我靠還真繞過編譯,泛型了 //這貨我清楚了查看全部
-
通過getClass獲取類對象,再getMethod獲取方法, m.invoke(a1,new object[](10,20));//方法反射查看全部
-
獲取兩個相同名稱方法,可以用getMethod方法來獲取 c.getMethod("print","int.class,int.class"); 指定參數,獲取方法...查看全部
-
我擦,構造方法也是對象,真他M是萬物皆對象啊 java.lang.Constructor中封裝了構造函數的信息 getConstructor獲取所有的public的構造函數 getDeclaredConstructors得到所有的構造函數 Constructor【】 cs = c.getDeclaredConstructors()查看全部
-
getMethd.是獲取方法, getField方法是獲取變量 Field[] fs = c.getDeclaredFields()獲取的是自己申明的變量信息查看全部
舉報
0/150
提交
取消