怪!编译时不检查数组下标越界? 若有int[] a = {1,2,3};a[5] = 6;用命令javac编译后,并不报错请问各位大虾这是为什么?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 ArrayIndexOutOfBoundsException是运行时异常,也就是说编译可以通过,代码运行时才会抛出异常 编译不会报错。因为编译主要是类型与语法检查。本程序类型和语法毫无错误。所以能顺利通过编译。但数组在运行时如果超过length访问。会抛出ArrayIndexOutOfBoundsException 。这是运行时异常。楼主只需深入下java的异常处理,弄明白异常的原理。java为什么要引进异常机制。有什么好处。什么是必须要trycath的异常,什么是可以不捕捉的异常! 一点也不奇怪。一直以来,Java程序在编译的时候,本来就不会检查数组是否越界的。 分清RuntimeException和非运行时异常。 [接5楼]楼主可能是听说Java比C安全,所以误解了吧?如果在C中有如下代码int a[3] = {1,2,3};a[5] = 6; 运行时也不一定报错。它会按a的首地址偏移5个int的位置( a + sizeof(int) * 5 )去取值。取的是数组之外的某块内存空间的值,所以这个操作带有不安全的因素。而Java中,在对数组取值时,会检查数组边界,超出范围时会抛出ArrayIndexOutOfBoundsException,防止对数组之外的数据造成破坏。但是在编译时是不会去检查下标是否越界的。呵呵。 try{ int[] a = {1,2,3}; a[5] = 6; }catch(Exception e){ }//这样就不报错,看看是否加了try catch JAVA自动检查数组下标越界编译会通过,但执行会报异常ArrayIndexOutOfBoundsException欢迎加入 JAVA交流群 72923840 ArrayIndexOutOfBoundsException is RuntimeException 缓冲流BufferedInputStream的缓冲功能是怎样体现的? JAVA如何将内容添加到文件末尾,要求要在文件末尾的下一行添加? 怎样在java里面调用oracle里面的自定义数据类型 初学Java的困惑? java中线呈的问题 请教用java连接mysql数据库的问题? 请帮忙!!!!! java返回值的问题 ,急!! 各位,深圳 广州有什么好的做java的公司 关于Java&Javascript的问题 关于JPopupMenu的firePropertyChange方法的问题 java分页
但数组在运行时如果超过length访问。会抛出ArrayIndexOutOfBoundsException 。这是运行时异常。
楼主只需深入下java的异常处理,弄明白异常的原理。java为什么要引进异常机制。有什么好处。什么是必须要try
cath的异常,什么是可以不捕捉的异常!
一直以来,Java程序在编译的时候,本来就不会检查数组是否越界的。
楼主可能是听说Java比C安全,所以误解了吧?如果在C中有如下代码
int a[3] = {1,2,3};
a[5] = 6;
运行时也不一定报错。它会按a的首地址偏移5个int的位置( a + sizeof(int) * 5 )去取值。取的是数组之外的某块内存空间的值,所以这个操作带有不安全的因素。而Java中,在对数组取值时,会检查数组边界,超出范围时会抛出ArrayIndexOutOfBoundsException,防止对数组之外的数据造成破坏。
但是在编译时是不会去检查下标是否越界的。呵呵。
try{
int[] a = {1,2,3};
a[5] = 6;
}catch(Exception e){
}//这样就不报错,看看是否加了try catch
编译会通过,但执行会报异常ArrayIndexOutOfBoundsException欢迎加入 JAVA交流群 72923840