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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 六、通過反射了解集合泛型的本質

    1、通過Class和Method了解泛型的本質

    2、Java集合中的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯機無效了

    ArrayList list1 = new ArrayList();

    ArrayList<String> list2 = new ArrayList<String>();

    Class c1 = list1.getClass();

    Class c2 = list2.getClass();

    System.out.Println(c1 == c2);

    打印出true,說明編譯后集合的泛型是去泛型化的

    3、驗證

    我們可以通過方法的反射來操作,繞過編譯

    Method m = c1.getMethod("add",Object.class);

    m.invoke(list2,100);//繞過編譯操作就繞過了泛型

    System.out.println(list2.size());

    打印出1,說明加進去了

    此時就不能用foreach來遍歷了,否則會報類型轉換異常

    查看全部
  • 五、Java 方法反射的操作

    1、如何獲取某個方法

    方法名稱和方法參數列表才能唯一決定某個方法

    先獲取該類的類類型

    A a1 = new? A();

    Class c = a1.getClass();

    再通過類類型獲取具體的方法

    c.getMethod("print",int.class,int.class);

    c.getMethod("print",new Object[]{int.class,int.class});

    2、方法反射的操作

    Object obj = method.invoke(對象,參數列表);

    Object obj = m.invoke(a1,10,20);

    Object obj = m.invoke(a1,new Object[]{10,20});

    如果該方法沒有返回值,則返回null,如果有返回值則返回具體的值

    查看全部
  • 四、Java獲取成員變量構造函數的信息

    1、成員變量也是對象

    是java.lang.reflect.Field的對象

    Field類封裝了關于成員變量的操作

    getFields()方法獲取的是所有的public的成員變量

    getDeclaredField()方法獲取的是所有自己聲明的成員變量

    field.getType()得到成員變量的類型的類類型

    field.getName()得到成員變量的名稱

    2、構造函數也是對象

    是java.lang.reflect.Constructor的對象

    getConstructors()獲取所有的Public的構造函數

    getDeclaredConstructors()獲取所有的構造函數,構造方法必須是自己聲明的

    constructor.getParameterTypes()得到構造函數的參數列表(參數列表的類類型)

    當一個類中沒有定義構造函數時,系統會給該類中加一個默認的空參數的構造函數,方便該類初始化。只是該空構造函數是隱藏不見的。當在該類中自定義了構造函數,默認構造函數就沒有了。

    構造函數不能繼承,因為子類繼承父類的時候,先運行父類構造函數;具體的說就是運行父類時就會先“調用”父類的構造函數,注意“調用”和繼承不是一個含義,實質上是“自動運行”。

    查看全部
  • 三、Java獲取方法信息

    1、基本數據類型? ?void關鍵字? 都存在類類型

    2、Class類的基本API操作

    打印類的所有方法

    查看全部
  • 二、Java動態加載

    1、Class.forName("類的全稱");

    不僅表示了類的類類型,還代表了動態加載類

    請區分編譯、運行

    編譯時刻加載類是靜態加載、運行時刻加載類是動態加載

    2、靜態加載

    new 創建對象? 是靜態加載類,在編譯時刻就需要加載所有可能使用到的類

    查看全部
  • 可以寫一個接口,接口里面寫動態加載類的方法。以后要用到的每一個類都可以直接調用接口。
    查看全部
    1. Class類的使用

      通過類的累類型創建該類的對象實例。

      Class c1 = Foo.Class();

      或者

      Class c2 = foo1.getClass();

      或者

      Class c3 = null;

      try{

      c3 = Class.ForName("com.namespace.classname");

      }catch(ClassNotFoundException e){

      }

    ????????classname c = (classname)c1.newInstance();

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

    2018-11-19

  • //反射中獲取類名稱方式兩種

    a.getName();//獲取全稱(帶報名,關鍵字除外)

    a.getSimpleName(); //不帶包名的類名稱

    //獲取類型的方法

    a.getMethods();? ? //獲取類型所有public的函數,包括父類繼承的函數

    a.getDeclaredMethods()? ?//獲取類自己聲明的方法,不包括父類的

    a.getMethod("test");? ?//獲取類中指定的方法名稱


    查看全部
  • New是靜態加載類,在編譯時刻就要加載所有可能用到的類
    查看全部
  • 編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類
    查看全部
  • Java中集合的泛型,是防止輸入錯誤的,只在編譯階段有效,編譯之后就無效了!

    查看全部
  • 1、成員變量也是對象,是在java.lang.reflect.Field類,封裝了關于成員變量的操作

    Field[]?fs?=?c.getFields();//獲取的是public的成員變量信息
    Field[]?fs?=?c.getDeclaredFields();//獲取的是該類自己聲明的成員變量的信息

    2、構造函數也是對象,java.lang.Constructor中封裝了構造函數的信息。

    Constructor[]?cs?=?c.getConstructors//獲取所有的public的構造函數
    Constructor[]?cs?=?c.gerDeclaredConstructors()//得到所有的構造函數

    注:

    ?c.getInterfaces()//得到接口
    ?c.getModifiers()//得到訪問權限
    ?c.getPackage()//得到包名
    ?c.getResource()//得到返回值
    ?c.getSuperclass()//得到父類

    想要的到類的信息,就必須先得到類的類類型

    Class?c?=?Object.getClass();


    查看全部
  • 方法也是對象,方法是Method[]的對象

    Method[]?ms?=?c.getMethods();//or?c.getDeclaredMethods()

    Method類,方法對象

    一個成員就是一個Method對象

    getMedhods()方法取得是所有的public函數,包括父類繼承而來的

    getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限

    for(int?i?=?0;i<ms.length;i++){
    ??//得到方法的返回值類型的類類型
    ??Class?returnType?=?ms[i].getReturnType();
    ??System.out.print(returnType.getName()+"?");
    ??//得到方法的名稱
    ??System.out.print(ms[i].getName()+"(");
    ??//獲取參數類型-->得到的是參數類表的類型的類類型
    ??Class[]?paramType?=?ms[i].getParameterTypes();
    ??for(Class?c1:paramType){
    ????System.out.print(c1.getName()+",");
    ??}
    ??System.out.print(")");
    }


    查看全部
  • 1、什么是動態加載?什么是靜態加載?

    編譯時刻加載類是靜態加載類,運行時刻加載類是動態加載類

    靜態加載類:new 創建對象。是靜態加載類,在編譯時刻就需要加載所有的可能使用到的類

    通過動態加載類可以解決上述問題

    動態加載類:

    Class?c?=?Class.forName(args[0]);
    功能接口?name?=?(功能接口?)c.newInstanc();
    name.方法();


    查看全部
  • Class.forName("類全稱")實現運行時的動態加載類

    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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