JAVA反射系列之Method,java.lang.reflect.Method的使用。

最近寫項目,用反射的比較多,寫一個總結,以便查閱。java

  Method是反射最基本的一個類。測試

  直接上代碼:code

/**
 * @ClassName: Test
 * @Description: 測試類
 * @author JoseanLuo  
 * @date 2014-3-16 下午8:47:46
 * @version V1.0 
 */
public class Test {
    
   public String doRun(String pk,Student stu,String testrun)
   {
       return pk+stu+testrun;
   }
}

 測試對象

import java.lang.reflect.Method;
/**
 * @ClassName: ReflectMethodTest
 * @Description: 反射方法測試
 * @author JoseanLuo  
 * @date 2014-3-18 下午8:53:51
 * @version V1.0 
 */
public class ReflectMethodTest
{
public static void main(String[] args) throws Exception
{
Class clz=Class.forName("com.cx.test.Test");
System.out.println(clz);
Test test=(Test) clz.newInstance();
Method mt=clz.getMethod("doRun", new Class[]{String.class,Student.class,String.class});
System.out.println(mt);
System.out.println(mt.invoke(test, new Object[]{"i love you ",null,"i fuck you",}));
}
}

忘記加student類了,看我別一篇文章吧。ip

想要調用一個類的方法。get

首先要得到這個類Class
io

這裏用的class

Class.forName("com.cx.test.Test");

取得clz,test

而後利用clz.import

clz.getMethod("doRun", new Class[]{String.class,Student.class,String.class});

取得Method對象

這裏後一個能夠不傳,此時調用的是名字的無參方法。如

clz.getMethod("doRun");

調用的是doRun()方法。

若是你要想獲取的方法和你傳的參數類型,個數不一樣就會出錯(排除重載)

獲得了你相要的方法對象以後。

你就能直接調用他了

mt.invoke(test, new Object[]{"i love you ",null,"i fuck you",})

注意:方法參數順序,按方法接收參數順序。

趕忙試一下吧。 想要更加高級的功能,多看API,哈,歡迎你們一塊兒探討。

相關文章
相關標籤/搜索