最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言

非法參數(shù)異常(IllegalArgumentException)的拋出是為了表明一個方法被傳遞了一個非法參數(shù)。該異常擴(kuò)展了 RuntimeException 類,因此屬于在 Java 虛擬機(jī)(JVM)運(yùn)行期間可能拋出的異常。它是一種未檢查異常,因此不需要在方法或構(gòu)造函數(shù)的 throws 子句中聲明。

出現(xiàn) java.lang.IllegalArgumentException 的原因

  • 當(dāng)參數(shù)超出范圍時。例如,百分比應(yīng)介于 1 到 100 之間。如果用戶輸入的是 101,則將拋出 IllegalArugmentExcpetion。
  • 參數(shù)格式無效時。例如,如果我們的方法需要 YYYY/MM/DD 這樣的日期格式,但如果用戶傳遞的是 YYYY-MM-DD。那么我們的方法就無法理解,就會拋出 IllegalArugmentExcpetion。
  • 當(dāng)一個方法需要非空字符串作為參數(shù),但傳遞的卻是空字符串時。

示例

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 的步驟

  • 當(dāng)拋出 IllegalArgumentException 時,我們必須檢查 Java 堆棧跟蹤中的調(diào)用堆棧,找出產(chǎn)生錯誤參數(shù)的方法。
  • IllegalArgumentException 非常有用,可用于避免應(yīng)用程序的代碼必須處理未經(jīng)檢查的輸入數(shù)據(jù)的情況。
  • IllegalArgumentException 的主要用途是驗證來自其他用戶的輸入。
  • 如果要捕獲 IllegalArgumentException,我們可以使用 try-catch 塊。通過這樣做,我們可以處理某些情況。假設(shè)我們在 catch 代碼塊中加入代碼,讓用戶有機(jī)會再次輸入,而不是停止執(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異常常見場景

方法參數(shù)校驗

在方法中對參數(shù)進(jìn)行校驗是一種常見的場景,以確保參數(shù)的合法性。當(dāng)方法接收到一個非法的參數(shù)時,可以拋出IllegalArgumentException異常。

public void doSomething(int value) {
    if (value < 0 || value > 100) {
        throw new IllegalArgumentException("參數(shù)value的取值范圍必須在[0, 100]之間");
    }
    // 其他業(yè)務(wù)邏輯
}

構(gòu)造方法參數(shù)校驗

在構(gòu)造方法中對參數(shù)進(jìn)行校驗同樣是一種常見的場景。當(dāng)構(gòu)造方法接收到一個非法的參數(shù)時,可以拋出IllegalArgumentException異常。

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        if (name == null || name.isEmpty()) {
            throw new IllegalArgumentException("參數(shù)name不能為空");
        }
        if (age < 0 || age > 150) {
            throw new IllegalArgumentException("參數(shù)age的取值范圍必須在[0, 150]之間");
        }
        this.name = name;
        this.age = age;
    }
}

API調(diào)用參數(shù)校驗

在調(diào)用第三方API時,有時需要對傳入的參數(shù)進(jìn)行校驗,以確保參數(shù)的合法性。當(dāng)API接收到一個非法的參數(shù)時,可以拋出IllegalArgumentException異常。

public class UserService {
    public void createUser(String username, String password) {
        if (username == null || username.isEmpty()) {
            throw new IllegalArgumentException("參數(shù)username不能為空");
        }
        if (password == null || password.isEmpty()) {
            throw new IllegalArgumentException("參數(shù)password不能為空");
        }
        // 調(diào)用第三方API創(chuàng)建用戶
    }
}

總結(jié)

到此這篇關(guān)于如何解決Java中的IllegalArgumentException異常的文章就介紹到這了,更多相關(guān)Java中IllegalArgumentException異常解決內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中變量和常量詳解

    java中變量和常量詳解

    這篇文章主要介紹了Java中變量和常量詳解,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot使用Aspect切面攔截打印請求參數(shù)的示例代碼

    SpringBoot使用Aspect切面攔截打印請求參數(shù)的示例代碼

    這篇文章主要介紹了SpringBoot使用Aspect切面攔截打印請求參數(shù),本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • Java線程池中的工作線程Worker類源碼解析

    Java線程池中的工作線程Worker類源碼解析

    這篇文章主要介紹了Java線程池中的工作線程Worker類源碼解析,線程池中的工作線程是通過內(nèi)部類Worker表示的,Worker繼承自AbstractQueueSynchronizer,可以實現(xiàn)同步器的功能,需要的朋友可以參考下
    2023-12-12
  • Spring 面向切面編程AOP實現(xiàn)詳解

    Spring 面向切面編程AOP實現(xiàn)詳解

    這篇文章主要介紹了Spring 面向切面編程AOP實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Spring 使用Validation 驗證框架的問題詳解

    Spring 使用Validation 驗證框架的問題詳解

    Spring Boot在內(nèi)部通過集成hibernate-validation已經(jīng)實現(xiàn)了JSR-349驗證規(guī)范接口,在Spring Boot項目中只要直接使用就行了。 一般用在Controller中用于驗證前端傳來的參數(shù)。這篇文章給大家介紹Spring Validation 驗證框架的相關(guān)知識,感興趣的朋友一起看看吧
    2021-07-07
  • SpringBoot實現(xiàn)郵件任務(wù)的步驟詳解

    SpringBoot實現(xiàn)郵件任務(wù)的步驟詳解

    這篇文章主要介紹了SpringBoot實現(xiàn)郵件任務(wù)的步驟詳解,使用Spring Boot實現(xiàn)QQ郵箱發(fā)送郵件具有快速集成、統(tǒng)一的開發(fā)體驗、強(qiáng)大的維護(hù)和擴(kuò)展能力、可靠的送達(dá)性和安全性等優(yōu)勢,可以幫助你快速構(gòu)建穩(wěn)定可靠的郵件發(fā)送功能,需要的朋友可以參考下
    2023-10-10
  • JWT全面解讀和詳細(xì)使用步驟

    JWT全面解讀和詳細(xì)使用步驟

    這篇文章全面解讀了JWT規(guī)范和詳細(xì)使用步驟,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • SpringBoot集成Sharding-JDBC實現(xiàn)分庫分表方式

    SpringBoot集成Sharding-JDBC實現(xiàn)分庫分表方式

    這篇文章主要介紹了SpringBoot集成Sharding-JDBC實現(xiàn)分庫分表方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • SpringSecurity配置HTTPS的實現(xiàn)

    SpringSecurity配置HTTPS的實現(xiàn)

    本文介紹了SpringBoot項目中配置HTTPS并集成SpringSecurity,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • Java防止代碼被動態(tài)篡改的解決方案和代碼示例

    Java防止代碼被動態(tài)篡改的解決方案和代碼示例

    在Java中,反射攻擊是一種通過動態(tài)訪問或修改類、方法、字段等私有成員的攻擊方式,可能導(dǎo)致敏感數(shù)據(jù)泄露、權(quán)限繞過或系統(tǒng)崩潰,為了防止代碼被動態(tài)篡改,需要從 訪問控制、輸入驗證、安全機(jī)制、代碼加固 等多方面入手,以下是詳細(xì)的解決方案和代碼示例
    2025-07-07

最新評論

淮北市| 富顺县| 裕民县| 泰宁县| 义马市| 名山县| 关岭| 佳木斯市| 房产| 南郑县| 保定市| 咸阳市| 仪陇县| 雷州市| 韶关市| 仁寿县| 南京市| 明光市| 杨浦区| 萨迦县| 韶关市| 毕节市| 施秉县| 伊川县| 寿光市| 偏关县| 南宁市| 光泽县| 女性| 宜州市| 福建省| 常宁市| 乐东| 石屏县| 中牟县| 罗定市| 叶城县| 宜良县| 易门县| 海安县| 台州市|