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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 成員變量也是對象

    getFields()方法獲取的是所有的public的成員變量的信息 返回Field[]

    java.lang.reflect.Field 封裝了關于成員變量的操作

    getDeclaredFields()獲取的是該類自己聲明的成員變量的信息

    getType()獲取成員變量的類類型

    getName()獲取成員變量的名稱

    構造函數也是對象

    getConstructors()獲取所有的public的構造函數,返回Constructor[]

    getDeclaredConstructors()得到所有構造函數,包括所有訪問修飾符。

    java.lang.Constructor中封裝了構造函數的信息

    getName()獲取構造函數名稱

    getParameterTypes()獲取參數列表的類類型,返回Class[]






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

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

    void關鍵字 都存在類型

    Method類

    一個成員方法就是一個Method對象

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

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

    getReturnType();獲得方法返回值類的類類型

    getParameterTypes();獲得參數列表的類類的類類型 Class[]

    查看全部
  • Class.forName("類的全稱")

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

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

    描述:在 main 函數中,有一個 String args[] 參數,這就表示在執行某 .class 文件時,可以對 main 函數傳字符串參數(例如:命令行中:java OfficeBetter Excel,傳給主函數的參數就是Excel,如果傳多個參數,參數用空格隔開),Office類中使用了兩個類(沒有提供這兩個類),并調用其相應的方法,然后進行編譯報錯,提示找不到這兩個類,我們只提供了Word類和相應方法,并對它進行編譯(這是因為只使用Word的功能),這時候再對Office這個類進行編譯,這時候只報Excel找不到的錯誤,現在核心問題是只想使用Word,而不使用Excel這個類,但是報錯(這樣就不能運行,導致不能使用Word的功能),因為new 對象是靜態加載類的方式,在編譯時刻就需要加載所有可能使用到的類,但實際應用希望用到哪個類加載哪個類,這樣就不會在編譯時報錯,并且可以運行,所以可以通過動態加載類來解決該問題,通過Class.forName(args[0])動態加載這個類的Class實例對象,通過傳入一個類的路徑,即使沒有這個類,編譯時刻也不會報錯,但運行時刻會報錯,緊接著就可以通過Office的類類型創建Word對象,如果強制轉換為Excel類型,但是加載時卻是Word類,就可能發生錯誤,這時就需要給Word和Excel指定一個標準,也就是創建一個接口,并聲明相應方法,并且讓Word和Excel實現這個接口,如果傳入的參數是Excel,只需要再創建一個Excel并實現該接口,這樣就不用在主程序中修改類型了,實際應用中功能類通常使用動態加載類。

    查看全部
  • 類是對象,類是java.lang.Class類的實例對象

    Class類的實例對象表示方式:

    1、隱含的靜態成員變量class

    Class c1=Foo.class;

    2、類的getClass方法

    Foo?foo1=new Foo();

    Class c1=foo1.getClass();

    c1,c2表示了Foo類的類類型(class type)

    不管c1,c2都代表了Foo類的類類型,一個類只可能是Class類的一個實例對象

    3、Class.forName("類全名")

    Class c3=Class.forName("com.Foo");

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

    Foo foo=(Foo) c1.newInstance();

    注意:如果c1是A類的Class實例,則創建的是A類的對象,如果是B類的Class實例,則創建的是B類的對象,并且需要做強制類型轉換。

    默認需要該類有無參數的構造方法。


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

    2019-10-14

  • 方法反射的操作


    查看全部
  • 類的靜態加載與動態加載

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

    知識點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


    查看全部
  • 今天的筆記

    http://img1.sycdn.imooc.com//5d9072a80001f2fb09740442.jpg

    查看全部
    1. 靜態成員、普通數據類型不是對象。類是java.lang.Class的對象。

    2. 任何一個類都是Class的實例對象,這個實例對象有三種表示方式

      第一種表示方式????任何一個類都有一個隱含的靜態成員變量class

      ????Class c1=Foo.class;

      第二種表達方式????已經知道該類的對象通過getClass方法

    ? ? ? Class c2=foo1.getClass();

    第三種表達方式

    ????Class c3=null;

    ? ?c3=Class.forName("路徑 ? 包.類名");

    c1,c2,c3表示了Foo類的類類型(class type)

    我們完全可以通過類的類類型創建該類的對象實例

    Foo foo=(Foo)c1.newInstance();

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

    2019-09-29

  • aaaaa

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

    2019-09-23

  • new是靜態加載類,在編譯的時候把可能用到的類全都加載進來。

    查看全部
  • java中集合的泛型,是防止錯誤輸入的,只在編譯階段有效,繞過編譯就無效了


    總結:反射可以繞過編譯

    查看全部
  • 方法的反射

    Class c=a1.getClass()

    獲取方法

    Method m=c.getDeclaredMethod(name,parameterTypes);

    方法的反射操作

    m.invoke(obj,args);


    對于無參的方法

    Method m2=c.getMethod("print");

    m2.invoke(a1,new Object[]{});


    查看全部
  • 構造函數也是對象

    java.lang.Constructor中封裝了構造函數的信息

    getConstructors獲取所有的public的構造函數

    getDeclaredConstuctors得到所有的構造函數


    獲取構造函數的參數列表 ?得到的是參數列表的類類型

    Class[] paramTypes=constructor.getParameterTypes();


    查看全部
  • 成員變量也是對象

    java.lang.reflect.Field

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

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

    getDeclaredFields獲取的是該類自己聲明的成員變量的信息


    得到成員變量的類型的類類型

    Class fieldType=field.getType();


    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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