何时抛出 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)

相关文章