黑马程序员技术交流社区

标题: 用反射方式执行某个类中的main方法。 [打印本页]

作者: eternallove    时间: 2014-4-27 01:14
标题: 用反射方式执行某个类中的main方法。
为什么会出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at com.xy.test.Refelctmain.main(Refelctmain.java:10)
我就一直想不通代码一与代码二之间的关系式怎么建立的 ,神们求解...


作者: eternallove    时间: 2014-4-27 01:16
  1. 代码一:
  2. class TestArgument1 {
  3.     public static void main(String[] args) {
  4.         for (String arg : args) {
  5.                     System.out.println(arg);
  6.             }
  7.     }
  8. }[code]代码二:
  9. import java.lang.reflect.Method;

  10. public class Refelctmain {
  11.         public static void main(String[] args) throws Exception {
  12.              String startingClassName = args[0];
  13.              Method methodmain = Class.forName(startingClassName).getMethod("main",String[].class);
  14.                 System.out.println(methodmain.invoke(null,new Object[]{new String[]{"aaa","bbb"}}));
  15.         }
  16. }
复制代码
[/code]
作者: 黄晓鑫    时间: 2014-4-27 01:20
String startingClassName = args[0];关系是通过这个代码建立关系的 你传类进去 他就会找类的字节码 有字节码了 就可以拿到该方法对象 拿到方法对象了 就可以调用该方法了
作者: 松毛    时间: 2014-4-27 08:52
你在运行的时候需要传递参数给主函数,也就是要配置你需要反射的类!例如在Eclipse中,你要Run as “Run Configuration”,然后在Arguments选项里面把类TestArgument1配置进去。
作者: eternallove    时间: 2014-4-27 08:59
黄晓鑫 发表于 2014-4-27 01:20
String startingClassName = args[0];关系是通过这个代码建立关系的 你传类进去 他就会找类的字节码 有字节 ...

我也知道,但是当我自我安慰时也是这样想的,可是每个类中都有mian方法,都有String[]args这么一个字符串数组,String startingClassName = args[0];这句代码的操作,又会如何调用自己预订的main方法,会不会会掉错呢?请给我讲讲吧,我想了好几天的问题了。。。
作者: eternallove    时间: 2014-4-27 09:04
松毛 发表于 2014-4-27 08:52
你在运行的时候需要传递参数给主函数,也就是要配置你需要反射的类!例如在Eclipse中,你要Run as “Run Co ...

奥,对了,对了,我想起来,我太粗心,张老师的步骤我少了一步配置,谢谢,给我解答的哥们,谢谢。。。




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