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


    . 前言

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

    . 异常现象

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

    1. package test;
    2. /**
    3.  * @author 千锋健哥
    4.  */
    5. public class TestArrayException {
    6.     public static void main(String[] args) {
    7.         String[] strArray = {"千锋健哥""数组越界演示"};
    8.         System.out.println("=======" + strArray[2]);
    9.     }
    10. }
    11. /**
    12.  * @author 千锋健哥
    13.  */
    14. public class TestArrayException2 {
    15.     public static void main(String[] args) {
    16.         String[] strArray = {"千锋健哥""数组越界演示"};
    17.         for(int i = 0; i <= 9; i++) {
    18.             System.out.println("===打印数组中第"+i+"个元素的值===" + strArray[i]);
    19.         }
    20.     }
    21. }

    运行结果:

    . 异常原因

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

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

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

  • 相关阅读:
    基于Java+Spring+mybatis+vue+element实现酒店管理系统
    按压式按摩靠背的设计
    vue数据代理
    如何修改模型颜色
    Spire.Doc 10.11.9 支持设置形状填充颜色的透明度
    [教你做小游戏] 滑动选中!PC端+移动端适配!完美用户体验!斗地主手牌交互示范
    中国信通院《数据安全产品与服务图谱》,美创科技实现四大板块全覆盖
    十年网安行业代表性案例出炉,中睿天下Web攻击溯源案例实力入选
    R语言将多景遥感影像拼接在一起的方法
    【进阶玩法】策略+责任链+组合实现合同签章
  • 原文地址:https://blog.csdn.net/finally_vince/article/details/126290222