java中用反射调用其他类的main方法时应注意的问题
来源:互联网 发布:怎样下载python 编辑:程序博客网 时间:2024/05/17 09:05
一、正常情况下我们调用其他类的方法,如果是静态的,就直接:类名.方法 ;如果不是静态的:对象.方法;因为main为静态方法,所以调用它只需:类名.main(String...args)即可。
二、用反射方式来调用,我们往调用类的main方法中的参数传入被调用类的类全名,然后根据该类名来执行main方法
public void test() throws Exception {
Class clazz = Class.forName("com.Person");
Method method = clazz.getMethod("main",String[].class);
method.invoke(null,new String[]{"a","b","c"}); //因为主函数main是static方法,可以不用创建对象,直接调用,第一个参数可以写null,当然你也可以写person的一个对象
}
执行以上代码,会发现报IllegalArgumentException,提示: java.lang.IllegalArgumentException: wrong number of arguments;说明传入方法参数的个数不对。我在备注处传入的参数为:new String[]{"duancanmeng1","duancanmeng2","duancanmeng3"},一个字符串数组,因为main方法需要传入的也是一个字符串数组,从表面上看好像没错,那是怎么回事呢?
我们知道启动Java程序的main方法的参数是一个字符串数组,按照jdk1.5的语法,整个数组是一个参数,而按照jdk1.4的语法,数组中的每一个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac会按照jdk1.4的语法进行处理,因为jdk1.5肯定要兼容jdk1.4的语法,也就是把数组打散成若干个单独的参数,所以也就会出现上面的异常了。
我们知道了原因,那么也就好解决了,既然字符串数组会拆包成一个个的对象参数,那么我们就在这个字符串的外面再套上一层外衣,当拆包的时候只是拆掉外面的那层,里面的字符串数组就可以作为一个单独的参数进行传递了,如下:
public void test7() throws Exception {
Class clazz = Class.forName("com.Person");
Method method = clazz.getMethod("main",String[].class);
method.invoke(null,new Object[]{new String[]{"a","b","c"}});
//或者写成这样 method.invoke(null,(Object)new String[]{"a","b","c"});
}
- java中用反射调用其他类的main方法时应注意的问题
- Java中通过反射调用其他类中的main方法时要注意的问题
- 利用Java反射机制调用其他类的main方法
- 利用Java反射机制调用其他类的main方法 .
- 利用反射调用指向其他类的main方法
- java 主类的main方法调用其他方法
- 黑马学习---------------反射(执行其他类的main方法)
- 黑马程序员-反射调用其他类main方法
- java基础:反射类的main方法
- java 之反射类的main方法
- JAVA学习50_java 主类的main方法调用其他方法
- 在excel中用VLOOKUP函数应注意的一个问题
- 成员方法的反射:调用类中的main方法
- 子类重写父类的方法应注意的问题
- 子类重写父类的方法应注意的问题
- 子类重写父类的方法应注意的问题
- PHP中用header("Location: test.php")进行跳转时应注意的问题
- 反射 类的main方法
- Android 动画
- [Android1.5]TextView跑马灯效果
- thinkphp视频目录
- [留着备用]ASP.NET动态菜单生成通用方法
- 导入别人的项目时,工程中不自动生成Android Dependencies的解决方式
- java中用反射调用其他类的main方法时应注意的问题
- According to TLD, tag s:property must be empty
- 在开始运行输入CMD回车后,CMD命令黑框框出来闪一下就消失不见了--解决方法
- Qt中右击菜单(treeWidget)
- 编程不能创建内建体量
- MySQL源代码的海洋中游弋 初探MySQL之SQL执行过程
- ArcGIS API for JavaScript 本地部署
- Clojure介绍
- Windows网络体系结构总结