若有
int[] a = {1,2,3};
a[5] = 6;
用命令javac编译后,并不报错
请问各位大虾这是为什么?
谢谢!

解决方案 »

  1.   

    ArrayIndexOutOfBoundsException是运行时异常,也就是说编译可以通过,代码运行时才会抛出异常
      

  2.   

    编译不会报错。因为编译主要是类型与语法检查。本程序类型和语法毫无错误。所以能顺利通过编译。
    但数组在运行时如果超过length访问。会抛出ArrayIndexOutOfBoundsException 。这是运行时异常。
    楼主只需深入下java的异常处理,弄明白异常的原理。java为什么要引进异常机制。有什么好处。什么是必须要try
    cath的异常,什么是可以不捕捉的异常!
      

  3.   

    一点也不奇怪。
    一直以来,Java程序在编译的时候,本来就不会检查数组是否越界的。
      

  4.   

    分清RuntimeException和非运行时异常。
      

  5.   

    [接5楼]
    楼主可能是听说Java比C安全,所以误解了吧?如果在C中有如下代码
    int a[3] = {1,2,3};
    a[5] = 6; 
    运行时也不一定报错。它会按a的首地址偏移5个int的位置( a + sizeof(int) * 5 )去取值。取的是数组之外的某块内存空间的值,所以这个操作带有不安全的因素。而Java中,在对数组取值时,会检查数组边界,超出范围时会抛出ArrayIndexOutOfBoundsException,防止对数组之外的数据造成破坏。
    但是在编译时是不会去检查下标是否越界的。呵呵。
      

  6.   


    try{
    int[] a = {1,2,3};
    a[5] = 6;
    }catch(Exception e){

    }//这样就不报错,看看是否加了try catch
      

  7.   

    JAVA自动检查数组下标越界
    编译会通过,但执行会报异常ArrayIndexOutOfBoundsException欢迎加入 JAVA交流群 72923840
      

  8.   

    ArrayIndexOutOfBoundsException is RuntimeException