何时引发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对象。但是,如果以其他任何格式传递dateString,则此方法将引发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)