回 帖 发 新 帖 刷新版面

主题:数组下标越界检查问题

public class Main
{
    public static void main(String args[])
    {
        int a[][];
        a=new int[4][];
        a[0]=new int[3];
        a[1]=new int[5];
        a[2]=new int[2];

        a[0][0]=1;
        a[0][2]=3;
        a[33][6]=2;
        
    }

}

Java对数组下标越界是检查的啊

可是这个程序为什么能通过编译????

回复列表 (共5个回复)

沙发

异常是可以通过编译无法运行~~~

板凳

可以通过编译,运行时才会有异常.一般来说也用数组的length较好.

3 楼

错误分为三种。
第一种是语法错误(不能通过编译)。
第二种是运行时错误,可以编译,但运行时产生异常。
第三种是逻辑错误,可以编译,也可以正常运行,但得不到预期结果。

你所出现的错误是下标越界异常(IndexOutOfBoundsException),它属于运行时异常,只有运行时才会出现。

4 楼

IndexOutOfBoundsException  is a RuntimeException!
See javadoc here:
[url]http://java.sun.com/j2se/1.4.2/docs/api/java/lang/IndexOutOfBoundsException.html[/url]


[quote]Java对数组下标越界是检查的啊[/quote]

I don't know what do you mean "Java", I assume you are referring Java Compiler.

[size=4]No, there is no [b]compiler[/b] for any programming language on earth 对数组下标越界是检查的啊.

[b]Compiler[/b] neither remember nor check data, only check type and syntax.[/size]

Thanks!




5 楼

编译的时候是不会有问题的,因为语法上面没有问题
最后在运行的时候回出现问题
a[33][6]=2;
^

首先,你定义了一个4行X列的数组
但是在后面的赋值语句定义了33行6列的数据单元,
因此会出现溢出出错.

我来回复

您尚未登录,请登录后再回复。点此登录或注册