Java反射之 getMethod() 與invoke的使用__Java

來源:互聯網
上載者:User

1、forName 方法

   forName是一個靜態方法,其作用:通過調用來擷取類名對應的Class對象,同時將Class對象載入進來。

  如果將類名儲存在字串(如xml)中,就可以在程式運行時,動態調用載入。

注意:只有調用的參數是類名或者方法時,才可用。

2、newInstance()方法

   作用:將對象執行個體化。傳回型別為Object。與new的區別在於,new可以帶參,而newInstance()不可以,一邊初始化無參類。通常與forName()配合使用。

   例:

String str = "java.util.Date";Class cl1= Class.forName(str);//載入java.util.Date類Object obj = cl1.newInstance();//執行個體化cl1
   
3、getMethod()方法

   getMethod方法與getField方法類似,getField方法根據表示網域名稱的字串,返回一個Field對象。而getMethod方法則根據方法名稱和相關參數,來定位需要尋找的Method對象並返回。

  getMethod與getDeclareMethods方法的區別在於,後者返回一個Method對象數組,需要自己在結果中尋找所需Method對象。

  原型: Method getMethod(String name,Class...parameterTypes)

   參數解釋:name: method的名稱

                       parameterTypes:method的參數類型的列表(參數順序需按聲明method時的參數列表排列)

   返回:符合method名稱和參數的method對象

   拋出錯誤:NoSuchMethodException   

                      原因:沒有找到所要查詢的Method對象  或  Method名稱為“<init>”或“<clinit>”

                       NullPointerException

                       原因:所要查詢的Method對象的名稱為null

                        SecurityException

                        原因:調用的類或其父類沒有調用許可權

  例:

Method m1 = Employee.class.getMethod("getName");Method m2 = Employee.class.getMethod("raiseSalary",double.class);
  上面例子分別獲得了Employee類的getName方法和raiseSalary方法的 方法指標m1,m2。


4、invoke方法

  作用:調用封裝在當前Method對象中的方法。

   原型:Object invoke(Object obj,Object...args)

   參數解釋:obj:執行個體化後的對象

                       args:用於方法調用的參數

   返回:根據obj和args調用的方法的傳回值

   拋出錯誤:IllegalAccessException

                      原因:Method對象強制Java語言執行控制 或 無權訪問obj對象

                        IllegalArgumentException

                       原因:方法是執行個體化方法,而指定需要調用的對象並不是執行個體化後的類或介面

  例:

      Class l = Class.forName("test1.A");       Object obj1 = l.newInstance();       Object[] obj2 = new Object[1];      obj2[0] = new String("hello world");       Method m = l.getMethod("a1",new Class[] { String.class });      Object obj3 = m.invoke(obj1, obj2);  



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.