解决 Java Lang Index Out of Bounds Exception 异常
本篇文章我们将讨论考虑数组和 ArrayList 的 IndexOutOfBoundsException 错误。 我们还将了解导致此错误的原因以及最后如何解决它。
java.lang.IndexOutOfBoundsException 的原因
Arrays 和 ArrayList 中出现 IndexOutOfBoundsException 错误的原因是相似的,除了一个区别是错误描述不同。 我们在 Arrays 和 ArrayList 中收到此错误,分别为 java.lang.ArrayIndexOutOfBoundsException
和 java.lang.IndexOutOfBoundsException
。
造成该异常的原因如下:
- 当 ArrayList 为空时,尝试访问第一个索引处的值,即 0。
- 当我们尝试访问 Array 或 ArrayList 中负索引处的项目时。
- 当我们尝试访问 Array 或 ArrayList 的无效索引时,该索引可以是负数、等于或大于 Array 或 ArrayList 的大小。
请记住,IndexOutOfBoundsException 是一个运行时异常,Java 编译器在编译时不会检测到它。 所以,有必要知道如何访问Array或ArrayList。
经验法则是,在访问 Array 或 ArrayList 之前必须对其进行填充。 此外,我们只能访问满足以下条件的索引:0 <= index < (Array/ArrayList size)。
让我们借助代码示例来学习它。
考虑 ArrayList 的 java.lang.IndexOutOfBoundsException 解决方案
示例代码:
import java.util.ArrayList;
public class TestArrayList{
public static void main(String[] args){
ArrayList<String> list = new ArrayList<>();
//we try to get value at index 0 which is
//empty right now
System.out.println(list.get(0));
list.add("Mehvish"); //saves at index 0
list.add("Ashiq"); //saves at index 1
}
}
上面的代码导致 IndexOutOfBoundsException
错误,因为我们正在访问尚未填充的索引 0。
要解决此错误,我们必须首先在 ArrayList 中添加项目,然后通过确保没有访问无效索引来访问它们。 在下面的代码中,我们已经处理了所有可能导致IndexOutOfBoundsException的情况。
示例代码:
import java.util.ArrayList;
public class TestArrayList{
//create array list object of String type
static ArrayList<String> list = new ArrayList<>();
//populate array list
static void populateList(){
list.add("Mehvish"); //saves at index 0
list.add("Ashiq"); //saves at index 1
}
/*
Access the index only if the index
is valid and the list is not empty. Otherwise, print
the message to inform the user
*/
static void getElement(int index){
if(list.size() != 0 && index >= 0 && index < list.size()){
System.out.println(list.get(index));
}else{
System.out.println("The list is empty or you have entered an invalid index");
}
}
//main method
public static void main(String[] args){
populateList();
getElement(0);
}
}
让我们在各种输入上测试此代码。
测试 1:用户将 0 传递给 getElement()
函数,输出将是,
Mehvish
测试 2:用户将 1 传递给 getElement()
函数,输出将如下所示:
Ashiq
测试 3:用户将 2 传递给 getElement()
函数,输出将是,
The list is empty or you have entered an invalid index
测试4:用户将-1传递给 getElement()
函数,输出如下,
The list is empty or you have entered an invalid index
测试 5:用户对 populateList()
函数进行注释并传递有效索引。 输出如下所示,
The list is empty or you have entered an invalid index
考虑数组的 java.lang.ArrayIndexOutOfBoundsException 的解决方案
示例代码:
public class TestArray{
public static void main(String[] args)
{
int array[] = {1,2,3,4,5} ;
for (int i = 0; i <= array.length; i++)
System.out.println(array[i]);
}
}
此代码示例由于尝试访问无效的索引 5 而导致 ArrayIndexOfBoundsException。 请记住,我们无法访问无效索引。
我们来测试一下下面的代码,它处理了所有可能的情况并避免了 ArrayIndexOutOfBoundsException 错误。
示例代码:
import java.util.ArrayList;
public class TestArray{
//required size of an array
static int size = 2;
//declare an int type array of specified size
static int array[] = new int[size];
//populate array
static void populateArray(){
for (int i = 0; i < size; i++)
array[i] = i+1;
}
//get element if a valid index is passed
static void getElement(int index){
if(array.length != 0 && index >= 0 && index < array.length){
System.out.println(array[index]);
}else{
System.out.println("The array is empty or you have entered an invalid index");
}
}
//main method
public static void main(String[] args){
populateArray();
getElement(1);
}
}
让我们在不同的用户输入上测试此代码。
测试 1:用户将 0 传递给 getElement()
函数,输出将是,
1
测试 2:用户将 1 传递给 getElement()
函数,输出将如下所示:
2
测试 3:用户将 2 传递给 getElement()
函数,输出将是,
The array is empty or you have entered an invalid index
测试4:用户将 -1 传递给 getElement()
函数,输出如下,
The array is empty or you have entered an invalid index
测试 5:用户对 populateArray()
函数进行注释并传递有效索引。 输出如下所示,
0
为什么是0? 这是因为我们初始化了一个空数组,其中 0 是 int 类型的默认值。 如果我们不初始化元素,则数值数组元素的默认值将设置为 0,而引用元素将设置为 null。
相关文章
使用 Java 连接 FTPS 服务器
发布时间:2023/07/14 浏览次数:76 分类:Java
-
安全文件传输协议 (FTPS) 是文件传输协议 (FTP) 的安全版本,它使用 SSL/TLS 加密来保护客户端和服务器之间传输的数据。 本文将介绍如何使用 Java 安全通道 (JSSE) API 连接到 Java 中的 FTPS 服务器。
使用 Java 创建 X.509 证书
发布时间:2023/07/14 浏览次数:107 分类:Java
-
X.509 是一种广泛使用的公钥基础设施 (PKI) 标准,用于保护和验证互联网上的交易。本文将教我们如何使用 Java 创建 X.509 证书。
Java 中错误 Unsupported Major Minor Version
发布时间:2023/07/14 浏览次数:68 分类:Java
-
出现 Unsupported Major.minor version 错误或 Java.lang.UnsupportedClassVersionError 的原因是运行时 JDK 较低,编译时 JDK 较高。 本篇文章介绍如何解决Java中不支持的major.minor版本。
Java 错误 Error:Java: Javactask: Source Release 1.8 Requires Target Release 1.8
发布时间:2023/07/14 浏览次数:200 分类:Java
-
在使用IntelliJ for Java时,无法编译Java程序是一个常见的问题。 本教程提供了此错误的解决方案。Error:Java: Javactask: Source Release 1.8 Requires Target Release 1.8 错误
解决 Java 异常 Unable to Instantiate org.apache.hadoop.hive.ql.metadata.Sessi
发布时间:2023/07/14 浏览次数:183 分类:Java
-
本篇文章介绍如何解决 java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient。Apache Hive 是一款开源数据仓库软件,用于读取、管理和写入存储在 Hadoop 文件中的大
Java 中 Could Not Find Java SE Runtime Environment 错误
发布时间:2023/07/14 浏览次数:149 分类:Java
-
当安装了运行时环境时,即 Java 找不到主 java.dll 文件时,可能会出现“Could not find Java SE Runtime Environment”错误。 本篇文章介绍如何解决 Java 中的“Could not find Java SE Runtime Environment”错误。
Java 中错误 java.net.SocketException: Software Caused Connection Abort: Recv F
发布时间:2023/07/14 浏览次数:75 分类:Java
-
本篇文章介绍如何解决 Java 中的以下错误:java.net.SocketException: Software caused connection abort: recv failed SocketException 是 IOException 的子类,当我们尝试访问套接字时会发生 IOException。
修复 Java 中无法打开 jvm.cfg 的问题
发布时间:2023/07/14 浏览次数:133 分类:Java
-
有时,我们认为一切都按预期进行,但有些问题却隐藏在幕后。 今天,我们将讨论类似的情况并确定可能的解决方案。Java 中的无法打开 jvm.cfg 错误 当我们将计算机更新到 Windows 10 但后来由于
修复 Java 中错误 Error: Else Without if
发布时间:2023/07/13 浏览次数:183 分类:Java
-
本篇文章我们将了解在用 Java 编写代码时只说 'else' without 'if' 的错误。 我们还将找出导致此错误的可能原因并找到解决方案。Java 中 error: 'else' without 'if'