Java反射機制調用源類的方法實例

今天看了一下Java的反射機制。自己動手寫了一個小程序,現在把它分享出來. 裏面附上我個人的一點理解. 目前我還沒有找到使用反射機制的具體必要性,但是多知道一點總沒錯.
    先說明一下程序的功能,我寫了一個ReflectionClass,裏邊只有一個方法. 它的功能是返回傳入的String類型與Int類型相加之和. 在測試類Test中調用源類的方法.
    OK, 廢話不多說. 上代碼..
  
   1、ReflectionClass類,只有一個測試方法
    public class ReflectionClass {
 
 public String test(String i1,int i2){
  return i1+i2;
 }
    }
  
   2、Test類
    import java.lang.reflect.InvocationTargetException;
    import java.lang.reflect.Method;

    public class Test {
 
 /**
  * @param args
  * @throws ClassNotFoundException
  * @throws ClassNotFoundException
  * @throws IllegalAccessException
  * @throws InstantiationException
  * @throws NoSuchFieldException
  * @throws SecurityException
  * @throws NoSuchMethodException
  * @throws InvocationTargetException
  * @throws IllegalArgumentException
  */
 public static void main(String[] args) throws ClassNotFoundException,          InstantiationException, IllegalAccessException, SecurityException,          NoSuchFieldException,         NoSuchMethodException, IllegalArgumentException,          InvocationTargetException{
  // TODO Auto-generated method stub
       
  Class Obj = null;
  
  //返回指定位置的Class對象
  
  Obj = Class.forName("com.ReflectionClass");
  
  
  //存儲傳入參數的個數及類型
  Class[] types = new Class[2];
  types[0]=String.class;
  types[1]=Integer.TYPE;
  
  //傳入參數Value
  Object[] objs = new Object[2];
  //String類型,值是隨便寫的
  objs[0] = new String("哈哈哈哈");
  //int類型
  objs[1] = new Integer(123);
  //得到代表指定源類方法的對象,這裏第一個參數爲源類的方法名,第二個參數爲傳入的參數類型
  Method  method = Obj.getDeclaredMethod("test",types);
  // 對帶有指定參數的指定對象調用由此 Method 對象表示的底層方法。
  //簡單說就是執行指定的這個方法,打印出結果.這裏第一個參數爲從中調用底層方法的對象,第二個參數爲傳入的數據Value
  String result = method.invoke(Obj, objs).toString();
  //輸出結果,這裏輸出爲:哈哈哈哈123
  System.out.println("這個是調用源類的方法的結果"+result);
 }
 
 
}
 
    聲明一點:如果你覺得傳入參數太麻煩不想傳入參數,有一個辦法,將源類的方法不設置參數並申明爲靜態方法. 否則會拋出java.lang.IllegalArgumentException或java.lang.NoSuchMethodException等異常.
 
   OK,這樣就完了.. 歡迎交流指正.. 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章