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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lyg2013 中级黑马   /  2013-4-14 14:44  /  2092 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 lyg2013 于 2013-4-15 22:54 编辑
  1. package day01;

  2. public class TestArguments {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 for(String arg : args){
  9.                         System.out.println(arg);
  10.                 }
  11.         }

  12. }
复制代码
  1. package day01;

  2. import java.lang.*;
  3. import java.lang.reflect.Constructor;
  4. import java.lang.reflect.Field;
  5. import java.lang.reflect.Method;
  6. public class ReflectTest {
  7.         public static void main(String[] args) throws Exception {
  8.   //反射方式调用main方法
  9.                 String startingClassName = args[0];
  10.                 Method mainMethod = Class.forName(startingClassName)
  11.                 .getMethod("main",String[].class );
  12. //                mainMethod.invoke(null, new Object[]{new String[]{"111","222","333"}});
  13.                 mainMethod.invoke(null, (Object)new String[]{"111","222","333"});
  14.                
  15.         }
复制代码
运行结果出现:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
    at day01.ReflectTest.main(ReflectTest.java:57)
怎么修改呢?






评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

4 个回复

倒序浏览
ArrayIndexOutOfBoundsException:注意这个单词,字面意思就是数组引用超出界限,也就是我们常说的越界问题。
比如,我们创建了一个数组 int a[] = new int[4] ;
那么数组a只能存放四个元素,而数组的下标是从0开始的,也就是说,a[3]就是最后一个元素。当你给a[4]赋值,或者使用a[4]的时候,就出现了ArrayIndexOutOfBoundsException异常。
接下来请你自己核对吧

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
你这个类是数组的角标越界.
具体越界的位置args[0],因为你刚开始运行的时候,args[]这个字符串数据里面并没有参数,所以这个时候数组里面的数据是空的,你调用第一个位置的数据,肯定就会出错.
你写的这个例子应该这样改,如果是直接在命令行中用java命令编译的时候,线运行javac,然后运行java的时候,在最后面输入要调用的类的名称,也就是给args赋值.比如:  javac ReflectTest.java     然后 java ReflectTest  day01.TestArguments  
或者,你也可以直接在forName的参数设置为一个值,值的内容就是TestArguments的包名加类名,中间用点,是字符串.这样就ok了

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
index没写对
回复 使用道具 举报
代码没有错误。报错的原因是。主函数ReflectTest 。传参不正确导致的数组越界。
String startingClassName = args[0];//这里传入的参数不正确。 在myeclipse里面设置 run as的传参设置成cm.nti56.TestArguments就可以了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马