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

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

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

難度入門
時長 1小時20分
學習人數
綜合評分9.67
760人評價 查看評價
9.9 內容實用
9.6 簡潔易懂
9.5 邏輯清晰
  • 1、new 出來的都是靜態加載類,一招出錯,全盤皆輸; 2、動態加載類 Class c = Class.forName(args[0]); OfficeAble oa = (OfficeAble)c.newInstance();//OfficeAble定義的功能類型接口
    查看全部
  • 通過反射獲取類或方法的信息 import java.lang.reflect.Method; public class ClassUtil { /** * 打印類的信息,包括類的成員函數、成員變量(只獲取成員函數) * @param obj 該對象所屬類的信息 */ public static void printClassMethodMessage(Object obj){ //要獲取類的信息 首先要獲取類的類類型 Class c = obj.getClass();//傳遞的是哪個子類的對象 c就是該子類的類類型 //獲取類的名稱 System.out.println("類的名稱是:"+c.getName()); /* * Method類,方法對象 * 一個成員方法就是一個Method對象 * getMethods()方法獲取的是所有的public的函數,包括父類繼承而來的 * getDeclaredMethods()獲取的是所有該類自己聲明的方法,不問訪問權限 */ 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()+"("); //獲取參數類型--->得到的是參數列表的類型的類類型 Class[] paramTypes = ms[i].getParameterTypes(); for (Class class1 : paramTypes) { System.out.print(class1.getName()+","); } System.out.println(")"); } }
    查看全部
  • ,類可以靜態加載/動態加載<br> 2,創建類的實例對象的方法 1)new創建對象:是靜態加載類(在編譯時期加載類),在編譯時刻就需要加載所有可能用到的類 Foo f=new Foo(); 2)通過類的類類型進行創建:Class c1=Class.forName("類的全路徑"):是類的動態加載,在運行時加載類 Foo f=(Foo)c1.newInstance();
    查看全部
  • 第一種表達方式:Class c1=Foo.class;<br> 第二種表達方式:Class c2=Foo.getClass();<br> 第三種表達方式:Classc c3=null;<br> c3=Class.forName("類的全名");<br>
    查看全部
    0 采集 收起 來源:Class類的使用

    2018-03-22

  • 類是對象,它是java.lang.Class的對象
    查看全部
    0 采集 收起 來源:Class類的使用

    2016-05-27

  • 后面的代碼
    查看全部
  • @Java反射機制——通過反射了解集合泛型的本質 1、反射的操作都是【編譯之后】的操作(因為編譯獲得class字節碼文件之后才能得到.class),即運行時操作 2、所以method.invoke()方法也是運行期運行,可以繞過編譯期。 二、驗證:對一個帶有泛型的數組添加不同于泛型的元素。 1、例如:List<String> list = new ArrayList<String>() 2、通過Method m = list.getClass().getMethod("add",Object.class);獲得list.add()方法的對象 3、m.invoke(list,"hello");m.invoke(list,1); 按理因為泛型的存在,不能添加整型"1"進去。因為invoke()是運行期操作,所以能夠通過編譯。 4、結果顯示,能夠插入"hello"和1,說明<>泛型只作用于編譯期,且只是為了規范輸入
    查看全部
  • 一、如何獲取某個方法:方法的【名稱】和【方法的參數列表】才能【唯一確定】某個方法 1、要獲取一個類的某個方法,需要先得到類類型 2、通過Class.getMethod(name,parameterTypes)獲得public的該方法:如c.getMethod("print",new Class[]{int.class,int.class})或者參數寫成int,int; ——> 來獲取 public void print(int a,int b) 3、同樣getDeclaredMethdo(name,paramterTypes)獲得自己聲明的該方法 二:方法的反射操作;就是用method對象進行方法調用;當然還是需要傳參的 method.invoke(對象實例,參數列表) 2.1:invoke(user,new Object[]{10,20})倘若沒有參數就可省略:invoke(user) 2.2:invoke(user,10,20)//直接傳參
    查看全部
  • class A{ public void print(){ System.out.println("helloworld");} public void print(int a,int b){ System.out.println(a+b);} public void print(String a,String b){ System.out.println(a.toUpperCase()+","+b.toLowerCase());}}
    查看全部
  • //要獲取print(int ,int )方法 1.要獲取一個方法就是獲取類的信息,獲取類的信息首先要獲取類的類類型 A a1 = new A(); Class c = a1.getClass(); 2.獲取方法 名稱和參數列表來決定 * getMethod獲取的是public的方法 * getDelcaredMethod自己聲明的方法 try {//Method m = c.getMethod("print", new Class[]{int.class,int.class}); Method m = c.getMethod("print", int.class,int.class); //方法的反射操作 //a1.print(10, 20);方法的反射操作是用m對象來進行方法調用 和a1.print調用的效果完全相同 //方法如果沒有返回值返回null,有返回值返回具體的返回值 //Object o = m.invoke(a1,new Object[]{10,20}); Object o = m.invoke(a1, 10,20); //獲取方法print(String,String) Method m1 = c.getMethod("print",String.class,String.class); //用方法進行反射操作 //a1.print("hello", "WORLD"); o = m1.invoke(a1, "hello","WORLD"); // Method m2 = c.getMethod("print", new Class[]{}); Method m2 = c.getMethod("print"); // m2.invoke(a1, new Object[]{}); m2.invoke(a1); } catch (Exception e) { e.printStackTrace();} }}
    查看全部
  • 方法的反射
    查看全部
  • java中集合的泛型是防止輸入錯誤的,只有在編譯階段有效,繞過了編譯就無效了 反射的操作都是在編譯之后的操作
    查看全部
  • 方法的反射
    查看全部
  • 獲取類的方法信息
    查看全部
  • 獲取參數類型的代碼
    查看全部

舉報

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

微信掃碼,參與3人拼團

微信客服

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

幫助反饋 APP下載

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

公眾號

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

友情提示:

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