亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

反射——Java高級開發必須懂的

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 編譯 運行
    查看全部
  • 靜態加載,在編譯時刻就要加載所有的類
    查看全部
  • 動態加載 不需重新編譯、 當有100個類時,有一個不能加載時,其它類需要運行。功能性的類,需要用到動態加載類
    查看全部
  • 通過反射了解集合泛型的本質 ArrayList list = new ArrayList(); ArrayList<String> list1 = new ArrayList<String>(); list1.add("hello"); Class c1 = list.getClass(); Class c2 = list1.getClass(); //c1 == c2 為true //反射的操作都是編譯之后的操作 //c1 == c2 結果返回true說明編譯之后的集合的泛型是去泛型化的 Java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了 //驗證:通過方法的反射來操作,繞過編譯 Method m = c2.getMethod("add",Object.class); m.invoke(list1,20);//繞過了泛型 區分編譯和運行 所有反射的操作都是要繞過編譯直接進入運行的
    查看全部
  • 方法的反射 public class MethodDemo1{ public static void main(String[] args){ //獲取一個方法就是獲取類的信息,獲取類的信息首先就要獲取類的類類型 A a1 = new A(); Class c = a1.getClass(); //獲取方法名稱和參數列表來決定 getMethod獲取的是public的方法 //getDelcaredMethod自己聲明的方法 //Method m = c.getMethod("print",new Class[]{int.Class,int.Class}); Method m = c.getMethod("print",int.Class,intClass); //方法的反射操作 用m對象來進行方法的調用和a1.print調用效果一樣 //方法如果沒有返回值返回null,有返回值返回具體的返回值 Object o = m.invoke(a1,new Object[]{10,20}); } } class A{ public void print(int a,int b){ System.out.println(a+b); } public void print(String a,String b){ } }
    查看全部
  • java-reflect專題
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-18

  • Class c = obj.getClass(); //構造函數也是對象 java.lang.Constructor中封裝了構造函數的信息 getConstructors獲取所有的public的構造函數 getDeclaredConstructors()獲取所有構造函數 Constuctor[] cs = c.getDeclaredConstructors();
    查看全部
  • 成員變量也是對象 java.lang.reflect.Field Field類封裝類關于成員變量的操作 getFileds()方法獲取的是所有的public的成員變量的信息 getDecaredFields獲取該類自己聲明的成員變量的信息 //Field[] fs = c.getFields(); //Field[] fs = c.getDecaredFields(); for(Field field : fs){ Class fieldType = fs.getType(); String fieldname = field.getName(); }
    查看全部
  • 基本的數據類型對應的類類型 void的關鍵字都存在類類型 Class c1 = int.class//int 數據類型的類類型 Class c2 = String .class;// String 類的類類型,String類的字節碼 Class c3 = double.class; Class c4 = Double.class; Class c5 = void.class; Class類的基本操作 public class Classdemo{ } public class ClassUtil{ public static void printClassMessage(Object obj){ //獲取類的信息,首先獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象,c就是該類的類類型 //獲取類的名稱 打印(c.getname()); //Method類是方法對象 一個成員方法就是一個Method對象 //getMethods()方法獲取的是所有public的方法,包括父類繼承而來的 //getDeclaredMethods()獲取所有該類生命的方法,不問訪問權限 Method[] ms = c.getMethods();// for(int i=0;i<ms.length;i++){ //得到返回值類型的類類型 Class returnType = ms[i].getReturnType(); 打印(returnType.getName()); // 得到方法的名稱 打印(ms[i].getName()) //獲取參數類型--》 得到的是參數列表的類型的類類型 Class[] paramTypes = ms[i].getParameterTypes(); for(Class class1:paramTypes){ print(class1.getName()); } } } }
    查看全部
  • 動態加載類 Class.forName("類的全稱") 不僅表示了類的類類型,還代表類動態加載類 //new 創建對象 是靜態加載類 ,在編譯時刻就需要加載所有的可能使用到的類 //通過動態加載類可以解決該問題 class office{ main方法{ try{ //動態加載,在運行時刻加載類 Class c = Class.forName("packagename.Classname"); //通過類類型,創建該類對象 OfficeAble e = (OfficeAble)c.newsInstance(); e.start(); }catch(...){ } } }
    查看全部
  • java.lang.Class 的構造對象是私有的只能由虛擬機來調用
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-18

  • 可以通過c1 c2 c3 來構造Foo類的對象實例 Foo foo2 = (Foo)c1.newInstance();
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-18

  • 所有的類都是java.lang.Class的實例對象 class Foo{ } Foo foo = new Foo() Class c1 = Foo.class; Class c2 = foo.getClass(); Class c3 = Class.forName("packagename.Foo"); c1 or c2 or c3 都是Foo的類類型
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 靜態成員和基本數據類型都不是面相對象的
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-18

  • Class類
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-01-18

舉報

0/150
提交
取消
課程須知
童鞋們,學習本課程前需要熟悉Java面向對象的思想,并能掌握Java IO輸入輸出流、集合和泛型等知識??蓞⒖寄秸n網Java入門的一、二、三季以及我的文件我做主——Java IO流課程。
老師告訴你能學到什么?
1、能夠理解并應用反射機制。 2、能夠了解反射機制在集合泛型中的應用。 3、有利于更好的學習框架等Java高級技術。

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!