第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

反射——Java高級開發(fā)必須懂的

難度入門
時(shí)長 1小時(shí)20分
學(xué)習(xí)人數(shù)
綜合評分9.67
760人評價(jià) 查看評價(jià)
9.9 內(nèi)容實(shí)用
9.6 簡潔易懂
9.5 邏輯清晰
  • 六、通過反射了解集合泛型的本質(zhì)

    1、通過Class和Method了解泛型的本質(zhì)

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

    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、驗(yàn)證

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

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

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

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

    打印出1,說明加進(jìn)去了

    此時(shí)就不能用foreach來遍歷了,否則會報(bào)類型轉(zhuǎn)換異常

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

    1、如何獲取某個(gè)方法

    方法名稱和方法參數(shù)列表才能唯一決定某個(gè)方法

    先獲取該類的類類型

    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(對象,參數(shù)列表);

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

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

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

    查看全部
  • 四、Java獲取成員變量構(gòu)造函數(shù)的信息

    1、成員變量也是對象

    是java.lang.reflect.Field的對象

    Field類封裝了關(guān)于成員變量的操作

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

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

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

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

    2、構(gòu)造函數(shù)也是對象

    是java.lang.reflect.Constructor的對象

    getConstructors()獲取所有的Public的構(gòu)造函數(shù)

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

    constructor.getParameterTypes()得到構(gòu)造函數(shù)的參數(shù)列表(參數(shù)列表的類類型)

    當(dāng)一個(gè)類中沒有定義構(gòu)造函數(shù)時(shí),系統(tǒng)會給該類中加一個(gè)默認(rèn)的空參數(shù)的構(gòu)造函數(shù),方便該類初始化。只是該空構(gòu)造函數(shù)是隱藏不見的。當(dāng)在該類中自定義了構(gòu)造函數(shù),默認(rèn)構(gòu)造函數(shù)就沒有了。

    構(gòu)造函數(shù)不能繼承,因?yàn)樽宇惱^承父類的時(shí)候,先運(yùn)行父類構(gòu)造函數(shù);具體的說就是運(yùn)行父類時(shí)就會先“調(diào)用”父類的構(gòu)造函數(shù),注意“調(diào)用”和繼承不是一個(gè)含義,實(shí)質(zhì)上是“自動運(yùn)行”。

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

    1、基本數(shù)據(jù)類型? ?void關(guān)鍵字? 都存在類類型

    2、Class類的基本API操作

    打印類的所有方法

    查看全部
  • 二、Java動態(tài)加載

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

    不僅表示了類的類類型,還代表了動態(tài)加載類

    請區(qū)分編譯、運(yùn)行

    編譯時(shí)刻加載類是靜態(tài)加載、運(yùn)行時(shí)刻加載類是動態(tài)加載

    2、靜態(tài)加載

    new 創(chuàng)建對象? 是靜態(tài)加載類,在編譯時(shí)刻就需要加載所有可能使用到的類

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

      通過類的累類型創(chuàng)建該類的對象實(shí)例。

      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();//獲取全稱(帶報(bào)名,關(guān)鍵字除外)

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

    //獲取類型的方法

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

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

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


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

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

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

    2、構(gòu)造函數(shù)也是對象,java.lang.Constructor中封裝了構(gòu)造函數(shù)的信息。

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

    注:

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

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

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


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

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

    Method類,方法對象

    一個(gè)成員就是一個(gè)Method對象

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

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

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


    查看全部
  • 1、什么是動態(tài)加載?什么是靜態(tài)加載?

    編譯時(shí)刻加載類是靜態(tài)加載類,運(yùn)行時(shí)刻加載類是動態(tài)加載類

    靜態(tài)加載類:new 創(chuàng)建對象。是靜態(tài)加載類,在編譯時(shí)刻就需要加載所有的可能使用到的類

    通過動態(tài)加載類可以解決上述問題

    動態(tài)加載類:

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


    查看全部
  • Class.forName("類全稱")實(shí)現(xiàn)運(yùn)行時(shí)的動態(tài)加載類

    查看全部

舉報(bào)

0/150
提交
取消
課程須知
童鞋們,學(xué)習(xí)本課程前需要熟悉Java面向?qū)ο蟮乃枷?,并能掌握J(rèn)ava IO輸入輸出流、集合和泛型等知識??蓞⒖寄秸n網(wǎng)Java入門的一、二、三季以及我的文件我做主——Java IO流課程。
老師告訴你能學(xué)到什么?
1、能夠理解并應(yīng)用反射機(jī)制。 2、能夠了解反射機(jī)制在集合泛型中的應(yīng)用。 3、有利于更好的學(xué)習(xí)框架等Java高級技術(shù)。

微信掃碼,參與3人拼團(tuán)

微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!