ArrayIndexOutOfBoundsException异常分析及解决办法

createh52周前 (12-20)技术教程17

学习Java的同学们,在刚接触数组这一知识点的时候,由于对数组的特性不熟悉从而经常会遇到数组下标越界的异常。

什么是数组下标越界异常?

在java开发过程中这是一个非常常见的异常,从名字上看是数组下标越界错误,解决方法就是查看为什么下标越界。当然顾名思义就是数组的下标超出了边界,也就是说我们在获取数组元素的过程中超出了数组的下标(也叫做索引)的范围从而引发的异常。

这个异常在其他的一些编程语言中是不会出现的,比如说JavaScript中因为数组的长度是可变,当获取超出数组长度的元素时返回的是undefined,而不是抛个异常出来。但是在java中是不可以的,因为Java的语法特性在数组初始化时必须设定好数组的长度,长度一旦确定后期将不能再改变,所有在Java中获取了数组下标之外的数据时将会发生数组下标越界异常即ArrayIndexOutOfBoundsException。

接下来通过一个示例给大家演示一下数组下标越界异常以及如何规避此异常。

创建一个测试类

  • 使用手动的方式获取数组元素

package com.exception;

/**

* @descrption:数组下标越界演示

* @author lizhilun

*

*/

public class ArrayIndexOutOfBoundsDemo {

public static void main(String[] args) {

//初始化一个String类型的1维数组

String[] array= {"我","爱","中","国"};

//依次获取数组中的元素

System.out.print(array[0]);

System.out.print("-"+array[1]);

System.out.print("-"+array[2]);

System.out.println("-"+array[3]);

//当要获取数组中第5个元素的时候将会出现下标越界异常

System.out.print("-"+array[4]);

}

}

  • 使用for循环的方式来获取数组中的元素


正确的使用循环条件

错误的使用循环条件


这个错误也是好多同学经常遇到的,因为数组的下标(索引)是从0开始的,所以我们在获取数组元素的过程中应该最多获取到数组长度的-1个元素上。

如何避免数组的下标越界?

上面案例中数组的元素的获取场景已经很明显的体现了,出现数组下标越界的原因也分析了,所以咱们以后在使用数组的过程中一定要注意数组的长度,我们获取数组元素的时候一定要先确认好是否超出了数组的下标范围,尤其是在循环中使用循环的条件来获取数组元素时一定要仔细的使用好循环条件从而尽可能避免出现数组下标越界的情况。

相关文章

在Java中如果对象的引用被设置为null,垃圾收集器应当如何工作?

在Java中,如果在程序初始化之初就将一个对象的引用设置为NULL。那么JVM的垃圾回收机制该如何工作呢?是不是就会立即释放该对象所占用的内存呢?答案是否定的,将一个对象设置为NULL,垃圾回收机制并...

Java判空,Optional和工具类真香?还是if(obj == null)更靠谱?

背景描述最近在开发项目时,我遇到了一个需要从 Hyperlink 对象中获取 link 属性的小需求。这个过程中我需要判断 Hyperlink 对象是否为 null,以防止出现空指针异常。面对这种情况...

java.lang.NullPointerException空指针异常

NPE空指针异常出现的原因是什么?空指针异常应该是初学编程的同学遇到最多的一种异常,由于缺少编程经验,对引用数据类型的数据使用不恰当导致的异常。空指针就是空引用,java空指针异常就是引用变量本身为n...

关于Java String 类型转换时null的问题

开发中经常遇到从集合类List、Map中取出数据转换为String的问题,这里如果处理不好,经常会遇到空指针异常java.lang.NullPointerException,在此总结一下常用转换为St...

Java中当对象不再使用时,不赋值为null会导致什么后果?

前言许多Java开发者都曾听说过“不使用的对象应手动赋值为null“这句话,而且好多开发者一直信奉着这句话;问其原因,大都是回答“有利于GC更早回收内存,减少内存占用”,但再往深入问就回答不出来了。鉴...

避免Java中NullPointerException的Java技巧和最佳实践

欢迎关注头条号:Java小野猫Java中的NullPointerException是我们最经常遇到的异常了,那我们到底应该如何在编写代码是防患于未然呢。下面我们就从几个方面来入手,解决这个棘手的?问题...