如何在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:

更新於:2023年11月28日

28K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.