黑马程序员技术交流社区
标题:
关于main方法的反射,具体哪里错了?何解?
[打印本页]
作者:
我叫MT
时间:
2014-2-19 21:33
标题:
关于main方法的反射,具体哪里错了?何解?
本帖最后由 我叫MT 于 2014-3-2 15:22 编辑
class DemoER
{
public static void main(String[] args)
{
String startingClassName = args[0];
Method methodCharAt2 = Class.forName(startingClassName).getMethod("main", String[].class);
//main方法是静态的,invoke()里第一个参数就不用传递对象
//俩次打包,1.5之后后自动拆包,一次打包会被拆成三份,而这里只能传一份
methodCharAt2.invoke(null,new Object[]{new String[]{"111","222","333"}});
//强制转换,相当于打了个死包,不会被拆
//methodCharAt2.invoke(null,(Object)new String[]{"111","222","333"});
}
}
class TestArguments
{
public static void main(String[]args)
{
for(String arg:args)
{
System.out.println(arg);
}
}
}
复制代码
DemoER.java:6: 错误: 找不到符号
Method methodCharAt2 = Class.forName(startingClassName).getMetho
d("main", String[].class);
^
符号: 类 Method
位置: 类 DemoER
1 个错误
什么地方错了?怎么解?
关于反射这块的,main方法的反射
作者:
赵永生
时间:
2014-2-23 12:22
这样写一下试一试 Class.forName(startClassName).getMethod("main", String[].class);
把starting 去掉ing 应该就没问题了。
作者:
迪兰奇迹
时间:
2014-2-24 12:24
虽然楼主是五天前发的帖子,不知道楼主解决问题了没有,但是仍然想和楼主探讨一下!
在楼主的代码中:
Method methodCharAt2 =
Class.forName(startingClassName)
.getMethod("main", String[].class);
红色代码得到的是String这个类的字节码文件,通过他无法得到一个名叫“main”的方法,所以会报错!
以下是我变动以后的代码:
import java.lang.reflect.Method;
class DemoER {
public static void main(String[] args) throws Exception {
//String startingClassName = args[0];
System.out.println(args[0]); // 此处可以通过主函数传值的方式传入args[0];
System.out.println("这是DemeER类中的主函数哟!");
}
}
public class TestArguments {
public static void main(String[] args) throws Exception {
Method methodCharAt2 = DemoER.class.getMethod(
"main", String[].class);
// main方法是静态的,invoke()里第一个参数就不用传递对象
// 俩次打包,1.5之后后自动拆包,一次打包会被拆成三份,而这里只能传一份
methodCharAt2.invoke(null, null);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2