在Java学习的初期,我们往往可能会遇到一些程序的错误提示,告诉我们,程序出现了某些不正常的情况,在这种情况发生时,我们一般称之为出现了异常。
我们目前有两类常见的错误:
一个是编译时异常 ,出现这种异常时,我们在编译阶段就无法正常通过了,这就代表我们的语法出现了错误,需要即使更改,比如缺了个分号之类的
再一个就是运行时异常了,出现这种异常,我们一般可以正确的通过编译,但在运行阶段时,系统却会突然报错,这就表示我们可能时遇到一些逻辑错误了
具体会出现哪些情况,又该怎样解决呢?这时我们就需要根据异常的提示信息具体分析了。
尤其时到数组这一篇章时,有两种运行时异常,可能会反复的出现,这时候我们就需要好好观察一下我们的程序逻辑了,首先第一个就是我们今天要讲的:
数组下标越界异常:ArrayIndexOutOfBoundsException
数组下标越界异常,就是一个典型的运行时异常,通常遇到这种情况,我们的程序确实会正常进行编译,但只要一运行,程序就会出现上图所示的报错,这就代表,我们的逻辑可能出现了错误,下面我们来看一下例子:
public class Test {
public static void main(String[] args) {
int[] nums = new int[]{1,2,3,4,5};
for(int i=0;i<=5;i++){
System.out.println(nums[i]);
}
System.out.println("数组中的元素遍历并输出完毕");
}
}
在上面的代码中,我们的数组有5个元素,它们的下标分别是,[0,1,2,3,4],但如果在for循环中,把i的初值设为0,并把结束条件为i<=5的话,我们这将会把数组中的[0,1,2,3,4,5]都拿出来并对其进行输出操作,直到i=6,循环结束。
但问题来了,数组下标是0-4,而我们却要将5位置的下标取出来进行输出,程序进行到这里,发现并没有下标为5的元素啊,于是程序就报出异常提示并结束运行了,下面的输出语句自然也不会执行了。
nums[5]这种写法本身并没有错,因此我们可以通过编译,但如果没有这个位置,我们还非要把这个位置中的东西取出来,再进行相应的操作肯定就不行了,因此一个运行时异常就自然产生了。
现在,我们知道了,出现这种异常的主要原因主要就是逻辑出现了错误,我们只需要讲条件修改,不再指定一个不存在的位置就可以了,像上面这个程序我们则可将循环修改为:
for(int i=0;i<5;i++){//将小于等于改为了小于
System.out.println(nums[i]);
}
此时i最大的值就是4了,等于5时,循环将会停止,程序也就能够正常运行了,下面的那个输出语句也能够正常输出了,即:
如果不做修改则会为:
输出语句并没有正常执行,并弹出空指针异常,在红圈内,系统提示我们问题发生在第7行:
可以看到,取出第下标为5的元素,并进行输出操作,这一指令,不正是发生再第五行吗,因此,我们只需要围绕着这一点进行分析,也就能够大概的分析出问题所在了 。
那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~