最近寫項目,用反射的比較多,寫一個總結,以便查閱。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,哈,歡迎你們一塊兒探討。