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);