为什么这会在运行时导致ArrayIndexOutOfBoundsException?

时间:2018-10-23 08:03:56

标签: java arrays

这是代码:

public class Test {
    public static void main(String[] args) {
        int[] a= new int[3];
        System.out.print(a[a.length]);
    }
}

为什么这会在运行时导致ArrayIndexOutOfBoundsExceptionwill?

5 个答案:

答案 0 :(得分:3)

a.length返回数组中的元素数,这里是3。

数组索引从0开始。如果包含3个元素,则其值为0,1,2。

没有索引3,因此是例外。

答案 1 :(得分:0)

索引从0开始(而不是1形式)。因此,在您的情况下,a的索引为012

但是您正在尝试访问索引3lengthsize)。

改为使用System.out.print(a[a.length]-1);

答案 2 :(得分:0)

您应该使用它:

public class Test{

     public static void main(String []args){
        int[] a= new int[3];
        System.out.print(a[a.length-1]);
    }
}

说明:

a.length将返回长度,即 3 (3个现有字段)。 但是a[3]的索引索引从0开始到2。 用-1减小长度将返回最后一个实际存在的索引(2)。

所以a[a.length](= a[3])导致数组索引超出界限异常。

答案 3 :(得分:0)

它从0开始,因此您必须更改为[a.length - 1]

 public class Test{
       public static void main(String []args){
          int[] a= new int[3];
          System.out.print(a[a.length-1]);
       }
    }

答案 4 :(得分:-1)

这是IndexOutOfBoundsException的层次结构:

 java.lang.Object
    java.lang.Throwable
        java.lang.Exception
            java.lang.RuntimeException
                java.lang.IndexOutOfBoundsException 

有时很难解决。在那些时刻,您可以使用IDLE调试器。它将在图形界面的每次迭代中显示每个变量的值。

您可以使用Eclipse调试器,NetbeansVisual Studio代码,Atom扩展名。