A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 心灵的一扇窗 于 2014-3-12 18:39 编辑

源代码:


运行情况:


评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

4 个回复

倒序浏览
因为数组下标越界异常(ArrayIndexOfBoundsException)属于运行时异常(RuntimeException)。
对于运行时异常,由于这类异常属于程序缺陷造成的,是程序员设计或者是实现上的问题,
如果设计良好并且正确实现的话,那么这类异常就永远不会发生。
这类异常在语法上不强制程序员必须处理,不处理这类异常也不会出现语法上的错误,
而编译工具javac.exe来编译程序就是首先检测程序是否有语法错误,
既然这类异常不处理也不会出现语法错误的话,那么编译理所当然就能通过。
那么这类异常就会等到程序运行时期才会处理,如果你仍没有处理,就会报错。
你可以看看Java异常方面的视频。:)

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
因为数组下标越界在语法上是正确的,该异常属于运行时异常,只有在程序运行时才会进行处理。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
蒋珍珍 发表于 2014-3-12 14:11
因为数组下标越界异常(ArrayIndexOfBoundsException)属于运行时异常(RuntimeException)。
对于运行时异 ...

非常感谢,说的很详细:P
回复 使用道具 举报
其实,你可以从语言设计者的角度看这个问题。
JAVA中,许多数组越界场景在编译时期是不可能发现了。
因为你在代码中可以写这样的代码:
  1. public void array(int len) {
  2.     int[] array = new int[len];
  3. }
复制代码

也就是说,只有在函数被调用的时候,通过参数才知道数组有多长,然后,它才能够依此到堆中,分配出这样一块不变长度的空间。(这个与C语言,有挺大的差异的)
所以,把它归为RuntimeException是一件非常恰当的事。
因为,既然数组长度是你自己定义的,显然代码中就不应该出现这种越界的情况。
只能停程序,改代码,连catch的必要都没有。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马