A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© eternallove 中级黑马   /  2014-4-27 01:14  /  1251 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么会出现Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at com.xy.test.Refelctmain.main(Refelctmain.java:10)
我就一直想不通代码一与代码二之间的关系式怎么建立的 ,神们求解...

5 个回复

倒序浏览
  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]

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
String startingClassName = args[0];关系是通过这个代码建立关系的 你传类进去 他就会找类的字节码 有字节码了 就可以拿到该方法对象 拿到方法对象了 就可以调用该方法了

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
你在运行的时候需要传递参数给主函数,也就是要配置你需要反射的类!例如在Eclipse中,你要Run as “Run Configuration”,然后在Arguments选项里面把类TestArgument1配置进去。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
黄晓鑫 发表于 2014-4-27 01:20
String startingClassName = args[0];关系是通过这个代码建立关系的 你传类进去 他就会找类的字节码 有字节 ...

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

奥,对了,对了,我想起来,我太粗心,张老师的步骤我少了一步配置,谢谢,给我解答的哥们,谢谢。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马