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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • Class a=Foo.class類名.class

    Class b=foo1.getclass()對象.getclass

    class c3=class.forName("類的全稱")

    Foo foo=(Foo)c1.newInstance()實例化Foo類的對象

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

    2018-08-01

  • Java反射機制——獲取成員變量&構造函數

    一、成員變量是java.lang.reflect.Field的對象

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

    2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息

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

    4、field.getType()獲得成員類型的類類型

    5、field.getName()獲得成員的名稱

    二、構造函數是java.lang.Constructor類的對象

    1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息

    2、建議getDeclaredConstructors()獲取自己聲明的構造方法

    3、Constructor.getName():String

    4、Constructor.getParameterTypes():Class[]


    查看全部
  • class.getName() 獲取類名

    class.getSimpleName() 不包含包名的類的名稱

    class.getMethods() 獲取所有public的函數,包括由父類

    class.getDeclareMethods() 獲取該類自行聲明的所有方法,不論訪問權限

    Method.getName() 獲取方法名

    Method.getReturnType() 得到方法返回值的類型的類類型

    method.getParameterTypes():獲取方法的參數類型的類類型數組class[]

    一、基本的數據類型,void關鍵字等都存在類類型
    ????Class c = 基類.class (int,String,double,void等)
    二、Class類的基本API操作
    ????1、c.getName()可以獲取類的名稱
    ????2、c.getSimpleName();//不包含包名的類的名稱
    ????3、c.getMethods()獲取類的【public方法】集合,【包括繼承來的】
    ????4、c.getDeclaredMethods()獲取的是所有該類【自己聲明】的方法,【不問訪問權限】
    ????注意【所有方法都是Method類的對象】
    三、Method類提供了操作方法的方法
    ????1、m.getReturnType()得到該方法的返回值類型的類類型(class),如int.class String.class
    ????2、m.getName()得到方法的名稱
    ????3、m.getParameterTypes()獲得參數列表類型的類類型,如參數為(int,int)則得到(int.class ,int class)
    ????Class c1 = int.class; int的類類型
    ????Class c2 = String.class; String類的類類型 String類字節碼
    ????Class c3 = double.class; double這個數據類類型的字節碼表示方式
    ????Class c4 = Double.class; Double這個類的類類型字節碼表示方式
    ????Class c5 = void.class; 表達了void這個類的類類型
    ????getName為這個類的類類型的具體名稱
    ????c1.getName ---> int
    ????c2.getName ---> java.lang.String 類的全稱
    ????c2.getSimpleName ---> String 不包含包名的類的名稱


    查看全部
  • @Java反射機制---通過反射了解集合泛型的本質
    一、反射的操作都是編譯之后的操作;就是運行階段
    二、java中集合的泛型是防止錯誤輸入的;只在編譯階段有效,只要繞過編譯就無效啦
    我們可以通過方法的反射來操作,繞過編譯
    eg:
    ArrayList list1=new ArrayList();
    ArrayList<String> list2=new ArrayList<String>();
    Class c1=list1.getClass();
    Class c2=list2.getClass();
    System.out.print(c1==c2);//true
    Method m=c2.getMethod("add",Object.class);
    m.invoke(list2,20);//向list2集合中添加一個int 型的值;繞過編譯
    當然是不能直接foreach list2集合的,會報類型轉換錯誤

    查看全部
  • @Java反射機制---方法反射的基本操作invoke
    一、獲取A類中的print(int,int)方法

    ?1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型
    ? A a1=new A();? Class c= a1.getClass();
    ?2.獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法
    ? Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式? 表示new Class[]{int.class,int.class},也可以直接列舉類類型
    二、方法的反射操作
    用m對象來進行方法調用,和a1.print(10,20)調用的方法相同 m.invoke(a1,new Object[]{10,20})
    Object o=m.invoke(對象名,參數);//方法如果沒有返回值返回null,如果有返回值返回具體值,參數可用數組的方式表示,也可以直接列舉,沒有參數就不寫
    public Class A{
    ?public void print(){};
    ?public void Print(Sting a,String b){}
    ?public void Print(int a,int b){};
    }
    public Class B{
    ?public static void main(String[] args){
    ? A a1 = new A();? Class c= a1.getclass;
    ? Method getMet=c.getMethod("print",String.class,String.class);//忘了加引號
    ? Object obj=getMet.invoke(a1,"df","df");
    }
    }

    查看全部
  • @Java反射機制---獲取成員變量&構造函數
    一、成員變量是java.lang.reflect.Field的對象
    1、Field類封裝了關于成員變量的操作
    2、Field[] fs = c.getFields()方法獲取所有public的成員變量Field[]信息
    3、c.getDeclaredFields獲取的是該類自己聲明的成員變量信息
    4、field.getType()獲得成員類型的類類型
    5、field.getName()獲得成員的名稱
    二、構造函數是java.lang.Constructor類的對象
    1、通過Class.getConstructor()獲得Constructor[]所有公有構造方法信息
    2、建議getDeclaredConstructors()獲取自己聲明的構造方法
    3、Constructor.getName():String
    4、Constructor.getParameterTypes():Class[]
    成員變量也是對象,是java.lang.reflect.Field的對象;

    查看全部
  • class是類類型,也可以理解是字節碼

    查看全部
  • 萬事萬物皆對象,類也是對象,是Class類的實例對象,這個對象我們稱為該類的類類型

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

    2018-07-20

  • 反射的操作都是編譯后的操作,而Java集合中的泛型只在編譯階段有效,

    可通過反射操作向集合中添加非泛型元素,但不能用foreach遍歷

    查看全部
  • java方法反射:獲取該類的類類型:getClass();

    獲取方法:getMethod/getDelcaredMethod(String methodName,Class...(參數類型的類類型))

    方法的反射操作:invoke(obj(該類的實例對象),obj.....(傳遞的參數))

    查看全部
  • 獲取成員變量及構造函數:獲取參數的類類型Class c=obj.getClass();

    獲取成員變量信息:Field[] fd=c.getFields();

    獲取構造函數信息:Constructor[] cs=c.getConstructors();


    查看全部
  • 動態加載類:Class c=Class.forname(String className);

    OfficeAble oa=(OfficeAble)c.newInstance();

    查看全部
  • class.getName() 獲取類名

    class.getSimpleName() 不包含包名的類的名稱

    class.getMethods() 獲取所有public的函數,包括由父類

    class.getDeclareMethods() 獲取該類自行聲明的所有方法,不論訪問權限

    Method.getName() 獲取方法名

    Method.getReturnType() 得到方法返回值的類型的類類型

    Method.getParammeterTypes() 得到參數列表的類型的類類型

    查看全部
    1. 編譯時刻加載類為靜態加載類,運行時刻加載類為動態加載類

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

    3. 通過類類型 getInstance創建對象? 是動態記載類,在運行時才需要用到的類

    查看全部
  • 獲取類類型的三種方式:

    1.Class c1 = Foo.class;

    2.Class c2 = foo1.getClass();

    3.Class c3 = Class.forName("xxx.xxx.xxx.Foo");

    特殊用法:

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

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

    2018-07-18

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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