线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0

时间:2011-09-12 10:19:37

标签: java

public class TestSample {
    public static void main(String[] args) {
        System.out.print("Hi, ");
        System.out.print(args[0]);
        System.out.println(". How are you?");
    }
}

编译此程序时,我收到此错误:

  

线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0


另外,为什么我不能有args接受这样的int数组:

public static void main(int[] args) {

3 个答案:

答案 0 :(得分:8)

<强> 1。 ArrayIndexOutOfBoundsException:0

抛出它是因为args.length == 0因此args[0]超出了有效索引(learn more about arrays)的数组范围。

添加args.length>0检查以修复它。

public class TestSample {
    public static void main(String[] args) {
        System.out.print("Hi, ");
        System.out.print(args.length>0 ? args[0] : " I don't know who you are");
        System.out.println(". How are you?");
   }
}

<强> 2。命令行参数为int

您必须自己解析int[]的参数,因为命令行参数仅作为String[]传递。要执行此操作,请使用Integer.parseInt(),但您需要进行异常处理以确保解析正常(learn more about exceptions)。 Ashkan的回答告诉你如何做到这一点。

答案 1 :(得分:5)

关于你问题的第二部分:

来自http://download.oracle.com/javase/tutorial/essential/environment/cmdLineArgs.html

  

解析数字命令行参数

     

如果应用程序需要支持数字命令行参数,那么   必须转换表示数字的String参数,例如“34”,   到数值。这是一个转换a的代码段   int的命令行参数:

int firstArg;
if (args.length > 0) {
    try {
        firstArg = Integer.parseInt(args[0]);
    } catch (NumberFormatException e) {
        System.err.println("Argument must be an integer");
        System.exit(1);
    }
}

答案 2 :(得分:4)

  1. 错误是因为程序启动时没有添加任何参数。
  2. 由于被调用的main方法(通过JVM)的签名是public static void main(String[] args)而不是public static void main(int[] args),如果你想要整数,你需要从参数中解析它们。