何时抛出 IllegalStateException 和 IllegalArgumentException?在 Java 中?
java 8object oriented programmingprogramming更新于 2025/9/21 8:12:17
IllegalStateException:
在非法或不适当的时间调用方法时,会抛出此异常,并生成 IlleagalStateException。
例如,ArrayList 类的 remove() 方法会在调用 next() 或 previous 方法后删除最后一个元素。
- 删除当前位置的元素后,需要移动到下一个元素才能将其删除,即每次调用 next() 方法只能调用一次 remove() 方法。
- 由于列表的初始位置(指针)位于第一个元素之前,因此如果不调用 next 方法,则无法调用此方法。
如果调用 remove() 方法,则会抛出 java.lang.IllegalStateException。
示例
在下面的示例中,我们尝试使用remove() 方法,然后移动到第一个元素
import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
public static void main(String args[]) {
//实例化 ArrayList 对象
ArrayList<String> list = new ArrayList<String>();
//填充 ArrayList
list.add(&"apples");
list.add(&"mangoes");
//获取 ArrayList 的 Iterator 对象
ListIterator<String> it = list.listIterator();
//移除元素而不移动到第一个位置
it.remove();
}
}
运行时异常
Exception in thread "main" java.lang.IllegalStateException at java.util.ArrayList$Itr.remove(Unknown Source) at MyPackage.NextElementExample.main(NextElementExample.java:17)
IllegalArgumentException − 每当向方法或构造函数传递不合适的参数时,都会抛出 IllegalArgumentException。
示例
java.sql.Date 类的 valueOf() 方法接受一个表示 JDBC 转义格式 yyyy-[m]m-[d]d 的日期字符串,并将其转换为 java.sql.Date 对象。但是,如果您传递任何其他格式的日期字符串,此方法都会抛出 IllegalArgumentException。
import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter your date of birth in JDBC escape format (yyyy-mm-dd) ");
String dateString = sc.next();
Date date = Date.valueOf(dateString);
System.out.println("Given date converted int to an object: "+date);
}
}
运行时异常
Enter your date of birth in JDBC escape format (yyyy-mm-dd) 26-07-1989 Exception in thread "main" java.lang.IllegalArgumentException at java.sql.Date.valueOf(Unknown Source) at july_ipoindi.NextElementExample.main(NextElementExample.java:11)

