在 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