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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • Class.forName("類的全稱")

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

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

    查看全部
  • 靜態成員基本數據類型不是對象

    類是java.lang.Class類的實例對象

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

    2019-07-12

  • Class?c2=String.class;
    System.out.println(c2.getName());
    System.out.println(c2.getSimpleName());//不包含包名的類的名稱

    結果:https://img1.sycdn.imooc.com//5d245a2d0001ab2f03620083.jpg


    查看全部
  • JAVA-Reflect
    • Class類的使用

    • 動態加載類

    • 方法的反射

    • 成員變量、構造函數的反射

    • 方法反射的基本操作

    • 集合泛型是編譯時的攔截,可以通過方法反射調用繞過編譯

    • Java類加載機制


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

    2019-07-09

  • 方法必須由名稱和參數列表來決定
    查看全部
  • Java通過反射了解集合泛型的本質

    知識點1:通過Class,Method認識泛型的本質,反射的操作都是編譯之后的操作。

    集合泛型:防止錯誤輸入的,只在編譯階段有效,編譯之后該泛型就無效了。

    如果對一個集合使用String泛型,那么添加20,就會出錯,通過創建兩個ArrayList對象,一個加泛型,一個不加泛型,結果驗證加泛型的類類型和不加泛型的類類型是相等的。

    結論:c1==c2結果返回true,說明編譯之后集合的泛型是去泛型化的。

    https://img1.sycdn.imooc.com//5d12cd1d0001663f08390520.jpg

    案例:通過方法的反射來操作,繞過編譯,往集合中添加其他類型數據。

    https://img1.sycdn.imooc.com//5d12d06d0001a46109190647.jpg


    查看全部
  • args 是 使用 命令行的參數列表 形如:? java? 指定的程序名 參數?

    args[0]即 參數列表的 第一個參數?

    "Word".equals(args[0])?即判斷?第一個參數是否等于?word

    查看全部
  • Java方法反射的基本操作

    知識點1:方法反射可以完成的功能

    invoke(對象,參數列表):獲取某個特定方法,方法對象的方法,它是有返回值的,如果方法返回值為void,則該方法返回值為null,如果方法有具體返回值,則該方法的返回值就是具體返回值。

    getMethod(name):獲取沒有參數的public方法對象,name就是方法的名稱,這是方法對象調用的invoke(A類對象)或者invoke(A類對象,new Object[]{})。

    getMethod(name,parameterTypes):獲取public方法,name就是方法的名稱,parameterTypes智能提示里是Class...parameterTypes代表是可變參數,所以這里可以傳數組(new Class[]{int.class}),返回值類型是Method對象。

    getDeclaredMethod(name,paramterTypes):獲得自己聲明的方法,name就是方法的名稱,parameterTypes智能提示里是Class...parameterTypes代表是可變參數,所以這里可以傳數組(new Class[]{int.class},也可以是int.class這樣),返回值類型是Method對象,沒使用反射時可以直接使用A對象調用,使用反射就需要調用方法對象的invoke(obj,obj...parameter),obj為A對象,obj...parameter為Object[]{10,20})。

    案例:獲取某一方法,再進行方法反射的操作。

    描述:創建一個MethodDemo1類,獲取某一個方法對象,通過方法反射來操作MethodDemo1,并且提供一個A類,A類中有兩個同名,但方法類型不一樣的方法,。


    https://img1.sycdn.imooc.com/5d12c8cd00017cff12100675.jpg

    https://img1.sycdn.imooc.com/5d12c8cd000170d803970118.jpg





    查看全部
  • 成員變量的反射和構造函數的反射

    知識點1:成員變量的反射

    java.lang.reflect.Field:成員變量也是對象,Field類封裝了關于成員變量的操作。

    getFields():獲取該類類型所有的public的成員變量信息,返回值為Field類型的數組。

    getDeclaredFields():獲取所有自己聲明的成員變量信息(不區分訪問修飾符的限制),返回值為Field類型的數組。

    getType():獲取成員變量類型的類類型,返回值類型為Class。

    getName():如果是成員變量類型調用該方法,則返回該類型的名字,如果是成員變量調用該方法,則返回成員變量名字。

    https://img1.sycdn.imooc.com//5d120f2300011ab310850596.jpg

    知識點2:構造函數的反射

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

    getConstructors():類類型調用的方法,獲取所有公有的構造方法,返回值類型為Constructor數組。

    getDeclaredConstructors():類類型調用的方法,獲取所有自己聲明的構造方法(不區分訪問修飾符),返回值類型為Constructor數組。

    getName():Constructor類的方法,獲取構造方法名(這里為類路徑+構造方法名)。

    getParameterTypes():Constructor對象的方法,獲取構造函數的參數列表,得到的是參數列表的類類型,返回值為Class類型數組。

    https://img1.sycdn.imooc.com//5d12132600012e1312210580.jpg




    查看全部
  • 獲取類的信息,

    1.通過參數(對象)獲取類的類類型,然后獲取類的信息

    查看全部
  • class 類

    查看全部
  • getName

    查看全部
  • double.class? 是數據類型的類類型

    Double.class 是封裝類的類類型

    查看全部
  • int.class int 的類類型

    String.class string類的類類型? String類字節碼,也就是編譯后的字節碼

    查看全部
  • 知識點1:類里面的標識符都有類類型。

    基本的數據類型對應的類類型

    例如:Class c1=int.class;這就是int的類類型,Class c2=String.class;String類的類類型,Class c3=double.class;和Class c4=Double.class;是完全不同的,Class c5=void.class,也就是類里面的聲明的都有類類型。

    Class實例對象的方法:

    getName():獲取類類型的具體名稱。如果是類形式的,名稱為類的全稱,例如:c1的類類型名稱為int,c2的類類型名稱為java.lang.String。

    getSimpleName():不包含包名的類的名稱。(例如:c2的類類型名稱為String)

    getMethods():獲取類的所有public函數(包括父類繼承的函數),返回的是Method類型的數組。

    getDeclaredMethod():獲取所有該類自己聲明的方法,不問訪問權限,返回的是Method類型的數組。

    Method類:提供了getName()得到方法名。提供了getReturnType()得到方法返回值類類型(比如返回值為String,則函數返回的是class java.lang.String,如果是int,函數返回的是class int),可以通過Class的getName返回返回值的名字而不帶class。提供了getParameterTypes()得到的是參數列表的類型的類類型(比如參數列表中存放的是int、int類型,則該方法返回的是int.class和int.class),這里也可以使用Class的getName返回參數列表的類型,而不帶.class。

    https://img1.sycdn.imooc.com/5d118cdd0001a90606400491.jpg

    知識點2:

    Class類的基本API操作

    案例:獲取一個類的全部信息,包括類的成員函數、成員變量。

    描述:創建一個工具類名稱為ClassUtil,并且有一個靜態方法,參數為Object類型參數,首先獲取該對象的類類型,這里使用第二種獲取方式,傳遞的是哪個對象,Class對象就是該對象類類型(這個功能是由native聲明的一個方法實現的,java中jni就是做本地方法的,該方法是由java來聲明,用C語言來實現),萬事萬物皆對象,方法同樣是對象。




    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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