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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 確定某個方法
    查看全部
  • Java反射機制——通過反射了解集合泛型的本質 1:反射的操作都是編譯之后的操作;就是運行階段 2: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集合的,會報類型轉換錯誤
    查看全部
  • 為什么使用反射,1.首先你能通過任意對象獲取類類型即是所有的信息,這個作用以后才能體現;2.方法的反射的好處就是解耦,比如說a,b,c對象都要調用 print()方法,正常的想法就是要創建每個對象,并且a.print() b.print() c.print() ,但是使用反射的話,就 print()方法的對象.invoke(a,參數列表)想要用哪個對象就用哪個對象
    查看全部
  • 方法的反射: 1.獲取A類中的print(int,int)方法: ①要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1=new A(); Class c= a1.getClass(); ②獲取方法 由名稱和參數列表來決定,getMethod獲取的是public方法,getDelcaredMethod獲取自己聲明的方法 Method m =c.getMethod(methodName,paramtypes);//paramtypes可以用數組的形式 表示new Class[]{int.class,int.class},也可以直接列舉類類型 2.方法的反射操作:是用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的對象;
    查看全部
  • 基本數據類型,void關鍵字都存在類類型 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方法】集合,【包括繼承來的】 ***注意【所有方法都是Method類的對象】 4、c.getDeclaredMethods()獲取的是所有該類【自己聲明】的方法,【不問訪問權限】 三、Method類提供了一些操作方法的方法 1、.getReturnType()得到該方法的返回值類型的類類型(class),如int.class String.class 2、.getName()得到方法的名稱 3、.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 不包含包名的類的名稱
    查看全部
  • new 出來的都是靜態加載類,編譯時刻加載所有類,編譯出錯即報錯 //動態加載類,運行時刻加載,能運行就不報錯 Class c = Class.forName(args[0]); //Word w = (Word)c.newInstance(); //Excel e = (Excel)c.newInstance(); OfficeAble oa = (OfficeAble)c.newInstance();//OfficeAble定義的功能類型接口,Word和Excel都繼承于它 oa.start();
    查看全部
  • 1.類也是對象,是java.lang.Class的實例對象 2.任何一個類都是Class類的實例對象,有三種表示方式: (Class的構造方法是私有的,只允許JVM調用,因此無法通過關鍵詞new創建Class的實例對象) ? 通過類名.class創建,也即說明任何一個類都有一個靜態的成員變量class 如:Class c1 = Foo.class; ? 通過類的對象的getClass方法 如:Foo foo1 = new Foo(); Class c2 = foo1.getClass(); ? 通過Class的forName方法傳入類的全限定名獲取 如:Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");(會有ClassNotFoundException) ? c1、c2表示的Foo類的類類型(class type) 萬事萬物皆對象,類也是對象,是Class類的實例對象,這個對象稱為類的類類型 可以通過類的類類型創建該類的對象 § 如:Foo foo2 = (Foo)c1.newInstance(); ? 一個類只能是Class的一個實例對象,無論通過三種方法中的哪一種獲取都一樣 ? 三種方法中,c1、c2為靜態加載類(編譯時加載),而c3為動態加載類(運行時加載)
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 。。。。
    查看全部
  • 類里面聲明的都有類類型
    查看全部
  • 為什么使用newInstantce()創建新對象時,需要強制類型轉換? 就是為什么OfficeAble oa = (OfficeAble) c.newInstance(); 而不是OfficeAble oa = c.newInstance(); public T newInstance() 查看API文檔返回的是一個泛型的
    查看全部
  • 1、new 出來的都是靜態加載類,一招出錯,全盤皆輸; 2、動態加載類 Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble)c.newInstance();//OfficeAble定義的功能類型接口
    查看全部
  • 所有的類 都是java.lang.Class 的對象 任何一個類都含有一個隱含的靜態成員變量class c1=c2,一個類只可能是Class類的一個實例對象,單例模式?
    查看全部
    0 采集 收起 來源:Class類的使用

    2017-07-19

  • 1:Class class1=Foo.class; ------->實際在告訴我們,任何一個類都有一個隱含的靜態成員變量 2: Class class2=foo1.getClass()---->已知該類的對象,通過該類的對象通過getClass方法 class1和class2表示Foo類的類 類型(class type) Foo這個類本身就是一個對象,Foo類的對象: 3:Class class3=null; class3=Class.forName(); class1==class2==class3
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • Constructor
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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