慕課網_反射——Java高級開發必須懂的
阿新 • • 發佈:2017-07-15
慕課網 null 決定 exce 集合泛型 ktr logs tde except
第1章 Class類的使用
1-1 Class類的使用 (15:18)
第2章 動態加載類
2-1 Java 動態加載類 (13:19)
第3章 獲取方法信息
3-1 Java 獲取方法信息 (17:06)
第4章 獲取成員變量構造函數信息
4-1 Java 獲取成員變量構造函數信息 (14:44)
第5章 方法反射的基本操作
5-1 Java 方法反射的基本操作 (13:55)
import java.lang.reflect.Method; public class Hello { public static void main(String[] args) { /* * 要獲取print(int a,int b)方法 1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要類的類類型 * * 2.獲取方法 名稱和參數列表來決定 getMethod獲取的是public的方法 getDeclaredMethod自己聲明的方法 */ A a1 = new A(); Class c = a1.getClass(); try { Method m1 = c.getDeclaredMethod("print", int.class, int.class); Method m2 = c.getDeclaredMethod("print", String.class, String.class); // 方法的反射操作 // 方法如果沒有返回值返回null,有返回值返回具體的返回值 Object o1 = m1.invoke(a1, 10, 20); Object o2 = m2.invoke(a1, "hello", "world"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class A { public void print(int a, int b) { System.out.println(a + b); } public void print(String a, String b) { System.out.println(a.toUpperCase() + "," + b.toLowerCase()); } }
第6章 通過反射了解集合泛型的本質
6-1 Java 通過反射了解集合泛型的本質 (07:53)
import java.lang.reflect.Method; import java.util.ArrayList; public class Hello { public static void main(String[] args) { ArrayList list1 = new ArrayList(); ArrayList<String> list2 = new ArrayList<String>(); list2.add("hello"); // list1.add(20);錯誤的 Class c1 = list1.getClass(); Class c2 = list2.getClass(); System.out.println(c1 == c2); // 反射的操作都是編譯之後的操作 /* * c1==c2結果返回true說明編譯之後集合的泛型是去泛型化的 Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效, 繞過編譯就無效了 * 驗證:我們可以通過方法的反射來操作,繞過編譯 */ try { Method m = c2.getMethod("add", Object.class); m.invoke(list2, 20);// 繞過編譯操作就繞過了泛型 System.out.println(list2.size()); System.out.println(list2); } catch (Exception e) { e.printStackTrace(); } } }
慕課網_反射——Java高級開發必須懂的