Java 中的 IllegalStateException 和 IllegalArgumentException 异常分别在什么情况下抛出?


IllegalStateException

当您在非法或不合适的时间调用方法时,会抛出此异常,从而生成一个 IlleagalStateException。

例如,ArrayList 类的 remove() 方法在调用 next() 或 previous 方法后删除最后一个元素。

  • 在删除当前位置的元素后,您需要移动到下一个元素才能删除它,即每次调用 next() 方法,只能调用一次此 remove() 方法。
  • 由于列表的初始位置(指针)将在第一个元素之前,因此在不调用 next 方法的情况下,您无法调用此方法。

如果您在其他情况下调用 remove() 方法,则会抛出 java.lang.IllegalStateException 异常。

示例

在以下示例中,我们尝试在移动到第一个元素之前,使用 remove() 方法删除 ArrayList 的元素。

import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Instantiating an ArrayList object
      ArrayList<String> list = new ArrayList<String>();
      //populating the ArrayList
      list.add("apples");
      list.add("mangoes");
      //Getting the Iterator object of the ArrayList
      ListIterator<String> it = list.listIterator();
      //Removing the element without moving to first position
      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)

更新于: 2019年8月6日

1K+ 浏览量

开启您的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.