黑马程序员-反射调用其他类main方法
来源:互联网 发布:淘宝上的日系店铺 编辑:程序博客网 时间:2024/05/29 17:48
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
目标:写一个程序,这个程序可根据用户提供的类名,去执行该类的main方法。
首先看一下从主方法正常调用其它类中方法的情况,以此为模板再进行反射调用。
//定义另一个类的主方法,为方便起见放在同一个文件里class TestArguments{ public static void main(String[] args){ for(String arg:args){ //循环输出传入的内容 System.out.println(arg); } }}public class ReflectArray { public static void main(String[] args) throws Exception{ //知道类名称时的调用方法 TestArguments.main(new String[]{"1","2","3"}); }}
以上程序是正常情况下调用TestArguments类的main方法。下面完成根据用户提供的类(TestArguments)完成调用主方法。
class TestArguments{ public static void main(String[] args){ for(String arg:args){ //循环输出传入的内容 System.out.println(arg); } }}public class ReflectArray { public static void main(String[] args) throws Exception{ //假设第一个传入的参数就是TestArguments的完整路径 String startingClassName=args[0]; //指定要取得的main方法和参数类型 Method mainMethod=Class.forName(startingClassName).getMethod("main", String[].class); //因为main方法是静态方法,所以传入的对象为null,并传入参数 mainMethod.invoke(null, new String[]{"1","2","3"}); }}编译时以上程序不报错,但运行时会报两个错。第一、要在arguments传入完整的路径。第二、jdk1.4与jdk1.5及以上中对invoke()方法传递数组的方式有所不同,jdk1.4会将传进来的数组拆开计算个数,例如传进数组int x[]{1,2,3}不会按一个参数看,而会拆散数组当成3个参数,而jdk1.5中会将穿进 来的数组按一个整体看。以下是解决方案:
在invoke()中用Object接收数组,(Object)new String[]{"1","2","3"},或者将数组整装成一个Object[],new Object[]{new String[]{"1","2","3"}}
class TestArguments{ public static void main(String[] args){ for(String arg:args){ //循环输出传入的内容 System.out.println(arg); } }}public class ReflectArray { public static void main(String[] args) throws Exception{ //假设第一个传入的参数就是TestArguments的完整路径 String startingClassName=args[0]; //指定要取得的main方法和参数类型 Method mainMethod=Class.forName(startingClassName).getMethod("main", String[].class); //因为main方法是静态方法,所以传入的对象为null,并传入参数 mainMethod.invoke(null, (Object)new String[]{"1","2","3"});//用Object接收数组 mainMethod.invoke(null, new Object[]{new String[]{"1","2","3"}});//将数组整装成一个Object[] }}输出结果为 1 2 3
0 0
- 黑马程序员-反射调用其他类main方法
- 黑马程序员java高新技术篇----通过反射调用main方法
- 黑马学习---------------反射(执行其他类的main方法)
- 利用Java反射机制调用其他类的main方法
- 利用Java反射机制调用其他类的main方法 .
- 利用反射调用指向其他类的main方法
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)
- 黑马程序员——反射调用main方法和数组Class及数组参数
- 黑马程序员-Java反射--用反射方式执行某个类中的main方法
- Java中通过反射调用其他类中的main方法时要注意的问题
- java中用反射调用其他类的main方法时应注意的问题
- 反射调用main方法
- 反射调用main方法
- 黑马程序员——反射调用方法
- 黑马程序员_用反射方式执行某个类中的main方法
- 通过反射调用其他类中的方法
- 反射调用main方法注意事项
- 黑马程序员—反射调用main方法的问题总结(涉及可变参数)(反射参数是一个数组的函数要小心)
- hbase shell 命令
- 高精度计算bign类
- 模拟CSDN请求,做一点事
- iOS_31_cocos2d_消息调度
- Java问题排查常用linux命令
- 黑马程序员-反射调用其他类main方法
- Java内存溢出
- hdu 4990 Reading comprehension(BestCoder Round #8 1002)
- ZOJ 3811 Untrusted Patrol(dfs+并查集)
- Java自带的性能监测工具用法简介——jstack、jconsole、jinfo、jmap、jdb、jsta、jvisualvm .
- 敏捷是把开发搞死吗?
- 关于mysql
- android - actionbar
- 4003. I-number