黑马程序员技术交流社区

标题: 反射main方法中的疑惑 [打印本页]

作者: 刘占月    时间: 2012-4-15 15:01
标题: 反射main方法中的疑惑
两个小问题。

String startingClassName = args[0];//1: 这句代码表示什么意思?
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
//2:还有这个Object的问题,听好几遍总听不大懂。谁能通俗点给讲讲? 还是这个只要死记住就ok了?



作者: 陈扬    时间: 2012-4-15 16:33
1、 类名由main(String[] args)方法中的第一个参数指定,所以问题一的代码意思是取得Class.forName(startingClassName)取出类名。  
2、在调用main方法时,invoke方法传入的对象可以为null,
    因为main方法是静态的,第二个参数传入一个String数组,
    在方法运行时它会将数组拆开,变成多个参数,
    所以我们需要将String数组用一个Objrct数组包装,避免这种情况发生,
    因为String数组就是一个Object,我们也可以在数组前面用Object转换类型
作者: 李震 李震 李震    时间: 2012-4-15 17:18
String startingClassName = args[0];接受的是运行时的参数
这句话是要传一个main方法当做参数传进去,张老师里面使用另一个类的mian方法做的参数传入进去的
Method mainMethod = Class.forName(startingClassName).getMethod("main", String[].class);
Class.forN获取地址,在指定main方法, String[].class是mian方法的参数类型。
mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}}); 因为调用的main方法是静态的,所以指定null,然后为方法设值,因为只能传入进一个数组而这里有3个,所以要转成一个Object数组对象。





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2