----------------------
ASP.Net+Android+IO开发S、
.Net培训、期待与您交流! ----------------------
----------------------
ASP.Net+Android+IOS开发、
.Net培训、期待与您交流! ----------------------
l
目标:
Ø
写一个程序,这个程序能够根据用户提供的类名,去执行该类中的
main
方法。用普通方式调完后,大家要明白为什么要用反射方式去调啊?
l
问题:
Ø
启动
Java
程序的
main
方法的参数是一个字符串数组,即
public static void main(String[]
args
)
,通过反射方式来调用这个
main
方法时,如何为
invoke
方法传递参数呢?按
jdk1.5
的语法,整个数组是一个参数,而按
jdk1.4
的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给
invoke
方法时,
javac
会到底按照哪种语法进行处理呢?
jdk1.5
肯定要兼容
jdk1.4
的语法,会按
jdk1.4
的语法进行处理,即把数组打散成为若干个单独的参数。所以,
在给
main
方法传递参数时,不能使用代码
mainMethod.invoke
(
null,new
String[]{“xxx”})
,
javac
只把它当作
jdk1.4
的语法进行理解,而不把它当作
jdk1.5
的语法解释,因此会出现参数类型不对的问题。
l
解决办法:
Ø
mainMethod.invoke
(
null,new
Object[]{newString[]{"xxx"}});
Ø
mainMethod.invoke
(null,(Object)newString[]{"xxx"});
,编译器会作特殊处理,编译时不把参数当作数组看待,也就不会数组打散成若干个参数了
我给你的数组,你不会当作参数,而是把其中的内容当作参数。
Classclazz = Class.forName(arg[0]);
MethodmMain = clazz.getMethod("main",String[].class);
mMain.invoke(null,newObject[]{newString[]{"aaa","bbb"}});
mMain.invoke(null,(Object)newString[]{"aaa","bbb"});
classTestArrayArguments {
publicstaticvoidmain(String [] args)
{
for(String arg:args)
{
System.out.println("----------"+ arg +"----------");
}
}
}
本文介绍如何使用Java反射机制来调用一个类的main方法,并解决了在不同JDK版本中传递字符串数组作为参数的问题。
730

被折叠的 条评论
为什么被折叠?



