简要说明:
该短文通过两个简单的示例讲解了Method的使用方法。第一段代码利用Method调用普通方法,第二段代码利用Method调用类的静态方法。第三段代码利用Method调用数组作为参数的方法,以调用其他类的main方法为例。
1、通过Method调用普通方法
package reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionMethod {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Method method = ReflectionMethod.class.getMethod("test", String.class);
method.invoke(new ReflectionMethod(), "调用了test方法");
}
public void test(String str){
System.out.println(str);
}
}
2、通过Method调用类的静态方法
<span style="font-size:18px;">package reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
public class ReflectionMethod02 {
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
Method method = ReflectionMethod02.class.getMethod("test", String.class);
method.invoke(null, "调用了test方法");
}
public static void test(String str){
System.out.println(str);
}
}</span>
3、通过Method调用其他类的main方法
package reflection;
public class MethodTest {
public static void main(String[] args) {
System.out.println(args.length);
}
}
package reflection;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* @author ye
* 利用Method调用其他类的main方法
* 掌握Method调用参数为数组的方法
*/
public class ReflectionMethod03 {
public static void main(String[] args) throws Exception {
Method method = MethodTest.class.getMethod("main",String[].class);
/*
*如果不把String数组包装秤Object数组的话,会报参数个数不正确异常
*原因是main方法需要接受一个String[]作为参数
*而通过invoke调用main方法时,编译器会将String数组拆分为多个参数
*此例中是拆分成3个参数。
*/
method.invoke(null, new Object[]{new String[]{"a","b","c"}});
}
}