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

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

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

難度入門
時長 1小時20分
學(xué)習人數(shù)
綜合評分9.67
760人評價 查看評價
9.9 內(nèi)容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • JAVA-Reflect專題

    1. Class類的使用

    2. 方法的反射

    3. 成員變量的反射

    4. 構(gòu)造函數(shù)的反射

    5. Java類加載機制

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

    2019-04-28


  • 萬事萬物皆對象。

    類也是對象,類是java.lang.Class類的實例對象。


    Class c1 = Foo.class;

    c1是Foo類的類類型(Class Type)


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

    可以通過類的類類型去創(chuàng)建類的實例對象

    前提:該類有無參構(gòu)造函數(shù),newInstance方法會通過無參構(gòu)造函數(shù)去生成類的實例對象。

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

    2019-04-28

  • 編譯時刻加載類是靜態(tài)加載類,運行時刻加載類是動態(tài)加載類


    查看全部
  • Foo?foo1=new?Foo();
    
    Class?c1=Foo.class;
    //任何一個類都有一個隱含的靜態(tài)成員變量
    
    Class?c2=fool.getClass();
    
    Class?c3=null;
    c3=Class.foeName("com.imooc.reflect.Foo");

    1.萬事萬物皆對象,類也是對象,是Class類的實例對象,這個對象我們稱為該類的類類型。

    2.Fool類的對象就是foo1,F(xiàn)ool類的類類型就是Class的對象

    3.c1==c2==c3

    4.

    //通過類的類類型創(chuàng)建該類的對象實例

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


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

    2019-04-27

  • //獲取類對象的三種形式

    //第一種

    Student s = new Student();

    Class c1 = s.getClass();

    //第二種

    Class? c2 = Student.class();

    //第三種

    Class c3? = Class.forName("package.Student");

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

    2019-04-23

  • 獲取類對象的三種方法

    Foo?f?=?new?Foo();
    //?第一種
    Class?c1?=?f.getClass();
    //?第二種
    Class?c2?=?Foo.class;
    //?第三種(包名+類名)
    Class?c3?=?Class.forName("package.Foo");

    使用類類型獲取該類的對象

    Foo?f?=?(Foo)c1.newInstance();


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

    2019-04-19

  • Java 方法反射的操作

    1、如何獲取某個方法

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

    先獲取該類的類類型

    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,如果有返回值則返回具體的值


    查看全部
  • 1、Class類

    ? 1) 在面向?qū)ο蟮氖澜缋?,萬事萬物皆對象。(java語言中,靜態(tài)的成員、普通數(shù)據(jù)類型除外)

    ? ?類是不是對象呢?類是(哪個類的對象呢?)誰的對象呢?
    ???類是對象,類是java.lang.Class類的實例對象

    ? 2 )Class.forName("類的全稱")不僅表示了,類的類類型,還代表了動態(tài)加載類,請大家區(qū)分編譯、運行加載類
    ? ?編譯時刻加載類是靜態(tài)加載類、運行時刻加載類是動態(tài)加載類

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

    2、方法的反射

    ??1)如何獲取某個方法
    ? ?方法的名稱和方法的參數(shù)列表才能唯一決定某個方法

    ? 2)方法反射的操作
    ???method.invoke(對象,參數(shù)列表)

    ? 3)為什么要用方法的反射
    ? ?指定方法名稱調(diào)用方法,舉個實際應(yīng)用的案例? ---->通過標準JavaBean的屬性名獲取其屬性值
    ? ?BeanUtil類? ?

    import?java.lang.reflect.Method;
    
    public?class?BeanUtil?{	
    ????/**	
    ?????*?根據(jù)標準javaBean對象的屬性名獲取其屬性值	
    ?????*?	
    ?????*?@param?obj	
    ?????*?@param?propertyName	
    ?????*?@return	
    ?????*/	
    ?????public?static?Object?getValueByPropertyName(Object?obj,?String?propertyName)?{		
    ?????????//?1.根據(jù)屬性名稱就可以獲取其get方法		
    ?????????String?getMethodName?=?"get"?+?propertyName.substring(0,?1).toUpperCase()?+?propertyName.substring(1);		
    ?????????//2.獲取方法對象		
    ?????????Class?c?=?obj.getClass();		
    ?????????try?{			
    ?????????????????//get方法都是public的且無參數(shù)			
    ?????????????????Method?m=?c.getMethod(getMethodName);			
    ?????????????????//3?通過方法的反射操作方法			
    ?????????????????Object?value?=?m.invoke(obj);			
    ?????????????????return?value;		
    ?????????????}?catch?(Exception?e)?{			
    ?????????????????e.printStackTrace();			
    ?????????????????return?null;		
    ?????????????}	
    ?????????}
    ?????}

    ? ClassUtil?

    import?java.lang.reflect.Constructor;
    import?java.lang.reflect.Field;i
    mport?java.lang.reflect.Method;
    
    ????public?class?ClassUtil?{	
    ????/**	*?打印類的信息,包括類的成員函數(shù)、成員變量(只獲取成員函數(shù))	
    ??????*?@param?obj?該對象所屬類的信息	
    ??????*/	
    ?????public?static?void?printClassMethodMessage(Object?obj){		
    ?????????//要獲取類的信息??首先要獲取類的類類型		
    ?????????Class?c?=?obj.getClass();//傳遞的是哪個子類的對象??c就是該子類的類類型	
    ?????????//獲取類的名稱		
    ?????????System.out.println("類的名稱是:"+c.getName());		
    ?????????/**		
    ??????????*?Method類,方法對象		
    ??????????*?一個成員方法就是一個Method對象		
    ??????????*?getMethods()方法獲取的是所有的public的函數(shù),包括父類繼承而來的		
    ??????????*?getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權(quán)限		
    ??????????*/		
    ??????????Method[]?ms?=?c.getMethods();//c.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()+"(");			
    ??????????????//獲取參數(shù)類型--->得到的是參數(shù)列表的類型的類類型			
    ??????????????Class[]?paramTypes?=?ms[i].getParameterTypes();			
    ??????????????for?(Class?class1?:?paramTypes)?{				
    ??????????????????System.out.print(class1.getName()+",");			
    ??????????????}			
    ??????????????System.out.println(")");		
    ???????????}
    ??????????}????
    ??????????/**?????
    ???????????*?獲取成員變量的信息?????
    ???????????*?@param?obj?????
    ???????????*/	
    ???????????public?static?void?printFieldMessage(Object?obj)?{		
    ???????????????Class?c?=?obj.getClass();		
    ???????????????/**		
    ????????????????*?成員變量也是對象		
    ????????????????*?java.lang.reflect.Field		
    ????????????????*?Field類封裝了關(guān)于成員變量的操作		
    ????????????????*?getFields()方法獲取的是所有的public的成員變量的信息		
    ????????????????*?getDeclaredFields獲取的是該類自己聲明的成員變量的信息		
    ????????????????*/		
    ????????????????//Field[]?fs?=?c.getFields();		
    ????????????????Field[]?fs?=?c.getDeclaredFields();		
    ????????????????for?(Field?field?:?fs)?{			
    ????????????????????//得到成員變量的類型的類類型			
    ????????????????????Class?fieldType?=?field.getType();			
    ????????????????????String?typeName?=?fieldType.getName();			
    ????????????????????//得到成員變量的名稱			
    ????????????????????String?fieldName?=?field.getName();			
    ????????????????????System.out.println(typeName+"?"+fieldName);		
    ????????????????}	
    ????????????}	
    ????????????/**	
    ?????????????*?打印對象的構(gòu)造函數(shù)的信息	
    ?????????????*?@param?obj	
    ?????????????*/	
    ?????????????public?static?void?printConMessage(Object?obj){		
    ?????????????????Class?c?=?obj.getClass();		
    ?????????????????/**		
    ??????????????????*?構(gòu)造函數(shù)也是對象		
    ??????????????????*?java.lang.?Constructor中封裝了構(gòu)造函數(shù)的信息		
    ??????????????????*?getConstructors獲取所有的public的構(gòu)造函數(shù)		
    ??????????????????*?getDeclaredConstructors得到所有的構(gòu)造函數(shù)		
    ??????????????????*/		
    ??????????????????//Constructor[]?cs?=?c.getConstructors();		
    ??????????????????Constructor[]?cs?=?c.getDeclaredConstructors();		
    ??????????????????for?(Constructor?constructor?:?cs)?{			
    ??????????????????????System.out.print(constructor.getName()+"(");			
    ??????????????????????//獲取構(gòu)造函數(shù)的參數(shù)列表--->得到的是參數(shù)列表的類類型			
    ??????????????????????Class[]?paramTypes?=?constructor.getParameterTypes();			
    ??????????????????????for?(Class?class1?:?paramTypes)?{				
    ??????????????????????????System.out.print(class1.getName()+",");		
    ??????????????????????}			
    ??????????????????????System.out.println(")");		
    ??????????????????}	
    ??????????????}
    ??????????}

    ?4)通過Class,Method來認識泛型的本質(zhì)

    ArrayList?list?=?new?ArrayList();				
    ArrayList<String>?list1?=?new?ArrayList<String>();		
    list1.add("hello");
    Class?c1?=?list.getClass();		
    Class?c2?=?list1.getClass();		
    System.out.println(c1?==?c2);?//?結(jié)果true?——反射的操作都是編譯之后的操作
    //?c1==c2結(jié)果返回true說明編譯之后集合的泛型是去泛型化的


    查看全部
  • int.class//int的類類型
    String.class//String的類類型
    .getName()//類的名稱
    .getSimpleName()//不帶包名的類名
    void關(guān)鍵字都存在類類型
    class類的基本API
    Class?c?=?obj.getClass();//傳遞的是哪個子類的對象?c就是該子類的類類型


    查看全部
  • 11111
    查看全部
  • 反射可以繞過編譯

    查看全部
  • 獲取類對象的三種方法:

    Foo?f?=?new?Foo();
    Class?c1?=?f.getClass();
    Class?c2?=?Foo.class;
    Class?c3?=?Class.forName("package.Foo");

    使用類類型獲取該類的對象

    Foo?f?=?(Foo)c1.newInstance();


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

    2019-03-30

  • Ok
    查看全部
  • 在編譯時刻加載類是靜態(tài)類加載,在運行時刻加載類是動態(tài)類加載。范型是防止錯誤輸入,在編譯之后是去范型的。
    查看全部
  • new對象就是靜態(tài)加載類,在編譯時刻即加載所有可能用到的對象。
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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