手把手教你解决ArrayIndexOutOfBoundsException数组越界异常

. 前言

最近很多初学java的小伙伴,甚至有些学习到JavaWeb或框架阶段的小伙伴跑来问健哥,该如何解决Java中的ArrayIndexOutOfBounds Exception数组越界异常。既然这个异常这么常见,那么健哥就在这里手把手地教大家分析解决掉这个问题,让你以后不再被这个异常给吓退。

. 异常现象

首先我们来看看下面这段代码。这段代码运行时就会出现ArrayIndexOutOfBoundsException数组越界异常。

package test;

/**
 * @author 千锋健哥
 */
public class TestArrayException {

    public static void main(String[] args) {
        String[] strArray = {"千锋健哥", "数组越界演示"};
        System.out.println("=======" + strArray[2]);
    }
}

/**
 * @author 千锋健哥
 */
public class TestArrayException2 {

    public static void main(String[] args) {
        String[] strArray = {"千锋健哥", "数组越界演示"};

        for(int i = 0; i <= 9; i++) {
            System.out.println("===打印数组中第"+i+"个元素的值===" + strArray[i]);
        }
    }
}

运行结果:

手把手教你解决ArrayIndexOutOfBoundsException数组越界异常_第1张图片

手把手教你解决ArrayIndexOutOfBoundsException数组越界异常_第2张图片

. 异常原因

那么为什么上面的代码会出现这个异常呢?健哥一步一步地来给各位小伙伴,分析解释一下产生这个异常的原因。

  • String[] strArray = {"千锋健哥", "数组越界演示"}; 这个数组中有两个元素, 他们分别是"千锋健哥" 和"数组越界演示";

  • 因为数组的索引号从0开始计数,所以"千锋健哥"的索引号为0, "数组越界演示"的索引号为1;System.out.println ("===" + strArray[2]);

  •  这里调用索引号为2的元素,而strArray数组中根本就没有这个索引号,因为当前数组的最大索引号是1,所以就抛出了ArrayIndexOut OfBoundsException异常提示信息;

  • 而下面代码for(int i = 0; i <= 9; i++)是遍历循环10次, 每次变量i的值加1;

  • System.out.println("=打印数组中第"+i+"个元素的值=" + strArray[i]); 打印数组中索引号为变量i的元素值,其中遍历第一次i的值为0,遍历第二次i的值为1,数组中都有这些索引的元素值。当第三次遍历的时候,i的值为2,这时数组strArray中没有这样的索引元素值,已经超过了数组的最大长度,所以抛出ArrayIndexOutOfBoundsException异常提示信息。

. 解决办法

既然问题原因找到了那么我们就很容易解决这个问题,解决过程如下:

  • 当程序一旦抛出ArrayIndexOutOfBoundsException异常的时候,那就说明某个地方使用或者调用了超过数组最大长度的元素,而这样的元素是不存在的;

  • 从运行截图中,我们找到提示异常的所在行数,是在TestArray Exception类的第10行和第14行报错;

  • 那么说明就是在第10行和第14行代码中有问题,我们将调用数组元素的索引号,改为数组中存在的索引号即可。

手把手教你解决ArrayIndexOutOfBoundsException数组越界异常_第3张图片

手把手教你解决ArrayIndexOutOfBoundsException数组越界异常_第4张图片

. 总结

所谓的ArrayIndexOutOfBoundsException数组越界异常,其实就是代码中有地方调用了数组中的某个元素,然后该元素的索引超过了数组的最大长度,但该元素在数组中并不存在,从而报错。所以我们只需要找到调用数组元素的代码所在,将调用的索引号改为数组中存在的索引号即可。

 *威哥Java学习交流Q群:691533824
加群备注:CSDN推荐

你可能感兴趣的:(分布式,servlet,java,jvm)