日期:2014-05-20  浏览次数:20652 次

java与C在底层具体是怎么处理数组越界的?
C语言并不检测数组越界,可直接对内存中的数据进行覆盖。但java却会抛出异常,在程序和内存中间是谁在检测数组越界的,还有是怎么检测的。跪求大师详解
java 内存 c语言 异常

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