如何在Java中解決IllegalArgumentException?
IllegalArgumentException用於指示方法傳遞了非法引數。此異常擴充套件了RuntimeException類,因此屬於Java虛擬機器(JVM)執行期間可能丟擲的異常。它是一個未檢查異常,因此無需在方法或建構函式的throws子句中宣告它。
java.lang.IllegalArgumentException的原因
引數超出範圍。例如,百分比應該在1到100之間。如果使用者輸入101,則會丟擲IllegalArugmentExcpetion。
引數格式無效。例如,如果我們的方法需要YYYY/MM/DD這樣的日期格式,但使用者傳遞的是YYYY-MM-DD。那麼我們的方法無法理解,就會丟擲IllegalArugmentExcpetion。
當方法需要非空字串作為引數,但傳遞了空字串時。
示例
public class Student {
int m;
public void setMarks(int marks) {
if(marks < 0 || marks > 100)
throw new IllegalArgumentException(Integer.toString(marks));
else
m = marks;
}
public static void main(String[] args) {
Student s1 = new Student();
s1.setMarks(45);
System.out.println(s1.m);
Student s2 = new Student();
s2.setMarks(101);
System.out.println(s2.m);
}
}
輸出
45 Exception in thread "main" java.lang.IllegalArgumentException: 101 at Student.setMarks(Student.java:5) at Student.main(Student.java:14)
解決IllegalArgumentException的步驟
當丟擲IllegalArgumentException時,我們必須檢查Java的堆疊跟蹤中的呼叫堆疊,並找到產生錯誤引數的方法。
IllegalArgumentException非常有用,可以用來避免應用程式程式碼必須處理未經檢查的輸入資料的情況。
IllegalArgumentException的主要用途是驗證來自其他使用者的輸入。
如果我們想捕獲IllegalArgumentException,我們可以使用try-catch塊。這樣做可以處理某些情況。例如,如果我們在catch塊中新增程式碼,以便在迴圈的情況下,讓使用者再次輸入,而不是停止執行。
示例
import java.util.Scanner;
public class Student {
public static void main(String[] args) {
String cont = "y";
run(cont);
}
static void run(String cont) {
Scanner scan = new Scanner(System.in);
while( cont.equalsIgnoreCase("y")) {
try {
System.out.println("Enter an integer: ");
int marks = scan.nextInt();
if (marks < 0 || marks > 100)
throw new IllegalArgumentException("value must be non-negative and below 100");
System.out.println( marks);
} catch(IllegalArgumentException i) {
System.out.println("out of range encouneterd. Want to continue");
cont = scan.next();
if(cont.equalsIgnoreCase("Y"))
run(cont);
}
}
}
}
輸出
Enter an integer: 1 1 Enter an integer: 100 100 Enter an integer: 150 out of range encouneterd. Want to continue y Enter an integer:
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP