Java 异常 越界问题

转自:http://blog.sina.com.cn/s/blog_8250c39a0101k4w7.html

越界问题一般来说都是数组问题。数组下标不对称。
1.java.lang.ArrayIndexOutOfBoundsException是运行时异常, 编译器是不会知道的,只有运行时jvm才能捕获到.

2.jvm为何能捕获到,数组在运行时是由jvm创建的一个东西,是用机器指令创建的。。。 类似于汇编指令, 先根据你声明的长度分别为每个元素赋值,压栈, 而对于数组的长度也是由一个特定的指令来得到的, 也会压到栈中。这就是你为什么能用a.length得到数组长度的原因, 并且jvm在读写数组元素时都会有与数组长度比较的指令, 如果越界则抛出异常。

3.java数组很特别, 它不像c语言的数组, 而更像c语言的字符串, c语言字符串有一个字符串搜索结尾符号, 而java数组在数组的结尾处写了一个数组长度(我不敢确定这样描述是不是正确, 但是数组长度确实是压到栈中了, 并且是在压完数组数据后压的), 这样, jvm通过一条指令就能快速得到数组长度。

我之前看过一篇文章就是专门说数组这东西是不是类的问题, 结论是它是一个类, 但是里面没有任何属性和方法, 类名就是 [ , 是一种特殊的原生类, 完全是由jvm临时产生, 而不是程序员写。

4.没有length属性为什么用.length就能得到长度, 原因就是写jvm的人用机器指令, 可能是汇编什么的直接读栈得到的。

5.每次读写时都要做一次判断, 这个判断是必要的, 如果你不判断, 如何去抛出异常呢。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值