何时引发IllegalStateException和IllegalArgumentException?在java中?

IllegalStateException:

当您在非法或不适当的时间调用方法时,会生成此异常,并生成IlleagalStateException。

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

  • 在当前位置删除元素后,您需要移动到下一个元素以删除它,即,每次调用该next()方法时,您只能调用remove()一次此方法。

  • 由于列表(指针)的初始位置将在第一个元素之前,因此如果不调用下一个方法就无法调用此方法。

如果调用该remove()方法,否则它将引发java.lang.IllegalStateException。

示例

在下面的示例中,我们尝试使用remove()方法删除ArrayList的元素,然后再移至第一个元素

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。

示例

valueOf()java.sql.Date类的方法接受一个以JDBC转义格式yyyy- [m] m- [d] d表示日期的String,并将其转换为java.sql.Date对象。但是,如果以其他任何格式传递date String,则此方法将引发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)