欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一文講解如何解決Java中的IllegalArgumentException異常

 更新時間:2024年03月02日 14:49:39   作者:SEO_juper  
這篇文章主要給大家介紹了關于如何解決Java中IllegalArgumentException異常的相關資料,IllegalArgumentException是Java中的一個標準異常類,通常在方法接收到一個不合法的參數時拋出,需要的朋友可以參考下

前言

非法參數異常(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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java使用Cookie判斷用戶登錄情況的方法

    java使用Cookie判斷用戶登錄情況的方法

    這篇文章主要為大家詳細介紹了java使用Cookie判斷用戶登錄情況,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 高吞吐、線程安全的LRU緩存詳解

    高吞吐、線程安全的LRU緩存詳解

    這篇文章主要介紹了高吞吐、線程安全的LRU緩存詳解,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • java中對象和Map互相轉換的幾種常見方式舉例

    java中對象和Map互相轉換的幾種常見方式舉例

    Map在日常開發(fā)應用中的頻率很高,最常用的實現類是HashMap和有序的TreeMap,下面這篇文章主要給大家介紹了關于java中對象和Map互相轉換的幾種常見方式舉例,需要的朋友可以參考下
    2024-01-01
  • springboot+nacos+gateway實現灰度發(fā)布的實例詳解

    springboot+nacos+gateway實現灰度發(fā)布的實例詳解

    灰度發(fā)布是一種在軟件部署過程中用于平滑過渡的技術,通過引入灰度發(fā)布SDK和配置網關策略實現,本文就來介紹一下,感興趣的可以了解一下
    2022-03-03
  • 深入了解java中常見的五種比較方法

    深入了解java中常見的五種比較方法

    在程序的世界里面,比較也是必不可少的,通過比較可以確定對象的相對順序、相等性以及其他比較條件,下面我們就來深入了解一下java中常見的五種比較方法吧
    2023-12-12
  • SpringBoot中@EnableAutoConfiguration注解的實現

    SpringBoot中@EnableAutoConfiguration注解的實現

    Spring Boot@EnableAutoConfiguration是一個強大的工具,可以簡化配置過程,從而實現快速開發(fā),本文主要介紹了SpringBoot中@EnableAutoConfiguration注解的實現,感興趣的可以了解一下
    2024-01-01
  • SpringBoot中@Scheduled()注解以及cron表達式詳解

    SpringBoot中@Scheduled()注解以及cron表達式詳解

    這篇文章主要介紹了SpringBoot中@Scheduled()注解以及cron表達式詳解,@Scheduled注解是Spring Boot提供的用于定時任務控制的注解,主要用于控制任務在某個指定時間執(zhí)行,或者每隔一段時間執(zhí)行,需要的朋友可以參考下
    2023-08-08
  • Java設計模式之抽象工廠模式

    Java設計模式之抽象工廠模式

    這篇文章主要為大家詳細介紹了Java設計模式之抽象工廠模式的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java中的常用輸入輸出語句的操作代碼

    Java中的常用輸入輸出語句的操作代碼

    這篇文章主要介紹了Java中的常用輸入輸出語句的操作代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)

    手把手教你如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)

    這篇文章主要介紹了關于如何用JAVA連接MYSQL(mysql-connector-j-8.0.32.jar)的相關資料,文中通過圖文介紹的非常詳細,對大家學習或者使用MySQL具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01

最新評論