java.lang.ArrayIndexOutOfBoundsException

时间:2020-02-23 14:36:40  来源:igfitidea点击:

java.lang.ArrayIndexOutOfBoundsException是运行时异常,因此它是未经检查的异常,不需要从方法中显式抛出。
请参阅Java中的异常处理

java.lang.ArrayIndexOutOfBoundsException

  • 引发ArrayIndexOutOfBoundsException表示我们正在尝试使用非法索引访问数组元素。

  • 当索引为负数或者大于或者等于数组的大小时,抛出此异常。

ArrayIndexOutOfBoundsException类图

ArrayIndexOutOfBoundsException超级类是Exception,RuntimeException和IndexOutOfBoundsException。

java.lang.ArrayIndexOutOfBoundsException示例

让我们看一个简单的示例,其中我们的程序可能会根据用户输入抛出ArrayIndexOutOfBoundsException。

package com.theitroad.exceptions;

import java.util.Scanner;

public class ArrayIndexOutOfBoundsExceptionExample {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("Enter size of int array:");
		int size = sc.nextInt();
		int[] intArray = new int[size];
		for (int i = 0; i < size; i++) {
			System.out.println("Please enter int value at index " + i + ":");
			intArray[i] = sc.nextInt();
		}
		System.out.println("Enter array index to get the value:");
		int index = sc.nextInt();
		sc.close();

		System.out.println("Value at " + index + " = " + intArray[index]);
	}
}

下面的日志显示了以上程序的执行之一。

Enter size of int array:
3
Please enter int value at index 0:
1
Please enter int value at index 1:
2
Please enter int value at index 2:
3
Enter array index to get the value:
4
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
	at com.theitroad.exceptions.ArrayIndexOutOfBoundsExceptionExample.main(ArrayIndexOutOfBoundsExceptionExample.java:23)

因此,由于用户的非法输入,我们的程序可能抛出ArrayIndexOutOfBoundsException。
还要注意,异常堆栈跟踪会打印出导致异常的非法索引。

如何修复ArrayIndexOutOfBoundsException

我们不应该尝试从此异常中恢复,而应通过检查传递的索引值是否为有效值来缓解这种异常。
另请注意,这种情况通常会在用户输入的情况下发生,如果我们自己创建数组并对其元素进行迭代,则发生此异常的机会会更少。

下面的代码片段显示了在使用用户输入来访问元素时程序中的微小变化,如果传递的值无效,则会显示一条警告消息以传递有效值。

boolean exit = false;
while (!exit) {
	System.out.println("Enter array index to get the value:");
	int index = sc.nextInt();
	if (index < 0 || index >= size) {
		System.out.println("Valid index range is from 0 to " + (size - 1));
	} else {
		System.out.println("Value at " + index + " = " + intArray[index]);
		exit = true; //to terminate the program
		sc.close(); //close resources
	}
}

现在,通过非法索引后,输出将如下所示。

Enter size of int array:
3
Please enter int value at index 0:
1
Please enter int value at index 1:
2
Please enter int value at index 2:
3
Enter array index to get the value:
4
Valid index range is from 0 to 2
Enter array index to get the value:
-1
Valid index range is from 0 to 2
Enter array index to get the value:
2
Value at 2 = 3