在 Java 中演示 java.lang.IllegalStateException

Sheeraz Gul 2022年4月27日
在 Java 中演示 java.lang.IllegalStateException

IllegalStateException 是 Java 语言的 RuntimeException 类的未经检查的异常部分。IllegalStateException 当被调用的方法是非法的或在错误的时间被调用时抛出。

此异常由程序员或 API 开发人员设置。例如,当使用迭代器时,如果我们在 next() 方法之前调用 remove() 方法,它将抛出 IllegalStateException

本教程演示了何时抛出 IllegalStateException 以便我们可以阻止它。

用 Java 演示 java.lang.IllegalStateException

IllegalStateException 通常在开发人员使用 List、Queue、Tree、Maps、Iterator 和其他 Collections 框架时抛出。

大多数情况下,列表和队列是引发 IllegalStateException 的地方。下图显示了 IllegalStateException 的结构。

非法状态异常

这是一个可以引发 IllegalStateException 的示例。

package delftstack;

import java.util.*;

public class Illegal_State_Exception{
    public static void main(String args[]) {
        List<String> Demo_List = new ArrayList<String>();
        Demo_List.add("Delftstack1");
        Demo_List.add("Delftstack2");
        Demo_List.add("Delftstack3");
        Demo_List.add("Delftstack4");
        Demo_List.add("Delftstack5");

        Iterator<String> Demo_Iter = Demo_List.iterator();
        while (Demo_Iter.hasNext()) {
            //System.out.print(Demo_Iter.next()+"\n");
        	// Calling remove() before next() will throw IllegalStateException
            Demo_Iter.remove();
        }
    }
}

在迭代器的 next() 之前调用 remove() 将引发 IllegalStateException

见输出:

Exception in thread "main" java.lang.IllegalStateException
	at java.base/java.util.ArrayList$Itr.remove(ArrayList.java:980)
	at delftstack.Illegal_State_Exception.main(Illegal_State_Exception.java:18)

为了防止 IllegalStateException,在 remove() 之前调用 next()

package delftstack;

import java.util.*;

public class Illegal_State_Exception{
    public static void main(String args[]) {
        List<String> Demo_List = new ArrayList<String>();
        Demo_List.add("Delftstack1");
        Demo_List.add("Delftstack2");
        Demo_List.add("Delftstack3");
        Demo_List.add("Delftstack4");
        Demo_List.add("Delftstack5");

        Iterator<String> Demo_Iter = Demo_List.iterator();
        while (Demo_Iter.hasNext()) {
            System.out.print(Demo_Iter.next()+"\n");
        	// Calling remove() after next() will work fine
            Demo_Iter.remove();
        }
    }
}

上面的代码现在可以正常工作了。

Delftstack1
Delftstack2
Delftstack3
Delftstack4
Delftstack5
Author: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

相关文章 - Java Exception