一文講解如何解決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 代碼塊中加入代碼,讓用戶有機會再次輸入,而不是停止執(zhí)行,尤其是在循環(huán)的情況下。
示例
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:
附:IllegalArgumentException異常常見場景
方法參數校驗
在方法中對參數進行校驗是一種常見的場景,以確保參數的合法性。當方法接收到一個非法的參數時,可以拋出IllegalArgumentException異常。
public void doSomething(int value) { if (value < 0 || value > 100) { throw new IllegalArgumentException("參數value的取值范圍必須在[0, 100]之間"); } // 其他業(yè)務邏輯 }
構造方法參數校驗
在構造方法中對參數進行校驗同樣是一種常見的場景。當構造方法接收到一個非法的參數時,可以拋出IllegalArgumentException異常。
public class Person { private String name; private int age; public Person(String name, int age) { if (name == null || name.isEmpty()) { throw new IllegalArgumentException("參數name不能為空"); } if (age < 0 || age > 150) { throw new IllegalArgumentException("參數age的取值范圍必須在[0, 150]之間"); } this.name = name; this.age = age; } }
API調用參數校驗
在調用第三方API時,有時需要對傳入的參數進行校驗,以確保參數的合法性。當API接收到一個非法的參數時,可以拋出IllegalArgumentException異常。
public class UserService { public void createUser(String username, String password) { if (username == null || username.isEmpty()) { throw new IllegalArgumentException("參數username不能為空"); } if (password == null || password.isEmpty()) { throw new IllegalArgumentException("參數password不能為空"); } // 調用第三方API創(chuàng)建用戶 } }
總結
到此這篇關于如何解決Java中的IllegalArgumentException異常的文章就介紹到這了,更多相關Java中IllegalArgumentException異常解決內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot+nacos+gateway實現灰度發(fā)布的實例詳解
灰度發(fā)布是一種在軟件部署過程中用于平滑過渡的技術,通過引入灰度發(fā)布SDK和配置網關策略實現,本文就來介紹一下,感興趣的可以了解一下2022-03-03SpringBoot中@EnableAutoConfiguration注解的實現
Spring Boot@EnableAutoConfiguration是一個強大的工具,可以簡化配置過程,從而實現快速開發(fā),本文主要介紹了SpringBoot中@EnableAutoConfiguration注解的實現,感興趣的可以了解一下2024-01-01SpringBoot中@Scheduled()注解以及cron表達式詳解
這篇文章主要介紹了SpringBoot中@Scheduled()注解以及cron表達式詳解,@Scheduled注解是Spring Boot提供的用于定時任務控制的注解,主要用于控制任務在某個指定時間執(zhí)行,或者每隔一段時間執(zhí)行,需要的朋友可以參考下2023-08-08手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)
這篇文章主要介紹了關于如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)的相關資料,文中通過圖文介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01