English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java에서 'if' 조건 내에서 IllegalArgumentException을 자동으로 처리하는 방법은 무엇인가요?

메서드나 생성자에 부적절한 파라미터를 전달할 때마다 IllegalArgumentException이 발생합니다. 이는 실행 시간 예외이므로 컴파일 시 이 예외를 처리할 필요가 없습니다.

예제

valueOf()java.sql.Date 클래스의 메서드는 JDBC escaping 형식으로 전달된 문자열을 받아들입니다.yyyy- [m] m- [d] d날짜를 나타내는 문자열을 가져와 java.sql.Date 객체로 변환합니다.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter your date of birth in JDBC escape format (yyyy-mm-dd) ");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: "+date);
   }
}

출력 결과

Enter your date of birth in JDBC escape format (yyyy-mm-dd)
1989-09-26
date을 객체로 변환한 경우: 1989-09-26

하지만, 다른 어떤 형식으로도 date String을 전달하면 이 메서드는 IllegalArgumentException을 발생시킵니다.

import java.sql.Date;
import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Scanner sc = new Scanner(System.in);
      System.out.println("Enter your date of birth in JDBC escape format (yyyy-mm-dd) ");
      String dateString = sc.next();
      Date date = Date.valueOf(dateString);
      System.out.println("Given date converted int to an object: "+date);
   }
}

運行時異常

Enter your date of birth in JDBC escape format (yyyy-mm-dd)
26-07-1989
Exception in thread "main" java.lang.IllegalArgumentException
   at java.sql.Date.valueOf(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:11)
在以下的Java範例中,Date構造函數(實際上已經棄用)接受

예제

setPriority()Thread類的方法接受一個表示線程優先級的整數值,並將其設置為當前線程。但是,傳遞給此方法的值應小於線程的最大優先級,否則此方法將拋出IllegalArgumentException

public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println(thread.MAX_PRIORITY);
      thread.setPriority(12);
   }
}

運行時異常

10Exception in thread "main"
java.lang.IllegalArgumentException
   at java.lang.Thread.setPriority(Unknown Source)
   at july_ipoindi.NextElementExample.main(NextElementExample.java:6)

在if條件下處理IllegalArgumentException

在使用導致IllegalArgumentException的方法時,由於您知道它們的合法參數,因此可以事先使用if-condition 제한/인수를 검증하고 예외가 발생하지 않도록 합니다.

예제

import java.util.Scanner;
public class IllegalArgumentExample {
   public static void main(String args[]) {
      Thread thread = new Thread();
      System.out.println("스레드 우선순위 값을 입력하세요: ");
      Scanner sc = new Scanner(System.in);
      int priority = sc.nextInt();
      if(priority<=Thread.MAX_PRIORITY) {
         thread.setPriority(priority);
      }else{
         System.out.println("우선순위 값이 작아야 합니다: ");+Thread.MAX_PRIORITY);
      }
   }
}

출력 결과

스레드 우선순위 값을 입력하세요:
15
우선순위 값이 작아야 합니다: 10
좋아할 만한 것