Computer >> 컴퓨터 >  >> 프로그램 작성 >> Java

Java에서 IllegalArgumentException을 해결하는 방법은 무엇입니까?


IllegalArgumentException 메서드에 잘못된 인수가 전달되었음을 나타내기 위해 throw됩니다. 이 예외는 RuntimeException 을 확장합니다. 클래스이므로 JVM(Java Virtual Machine) 작동 중에 throw될 수 있는 예외에 속합니다. 확인되지 않은 예외이므로 메서드나 생성자의 throw 절에서 선언할 필요가 없습니다.

java.lang.IllegalArgumentException의 원인

  • 인수가 범위를 벗어날 때. 예를 들어 백분율은 1에서 100 사이여야 합니다. 사용자가 101을 입력한 경우 IllegalArugmentExcpetion 던져질 것입니다.
  • 인수 형식이 잘못된 경우. 예를 들어, 우리 방법에 YYYY/MM/DD와 같은 날짜 형식이 필요하지만 사용자가 YYYY-MM-DD를 전달하는 경우. 그러면 우리의 방법은 IllegalArugmentExcpetion 을 이해할 수 없습니다. 던져질 것입니다.
  • 메소드에 비어 있지 않은 문자열이 매개변수로 필요하지만 null 문자열이 전달되는 경우

예시 1

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:15)

IllegalArgumentException 해결 단계

  • IllegalArgumentException 가 발생하면 Java의 스택 추적에서 호출 스택을 확인하고 잘못된 인수를 생성한 메서드를 찾아야 합니다.
  • IllegalArgumentException 매우 유용하며 애플리케이션의 코드가 확인되지 않은 입력 데이터를 처리해야 하는 상황을 피하는 데 사용할 수 있습니다.
  • IllegalArgumentException 의 주요 용도 다른 사용자의 입력을 확인하기 위한 것입니다.
  • IllegalArgumentException 을 포착하려는 경우 그러면 try-catch 블록을 사용할 수 있습니다. 이렇게 하면 몇 가지 상황을 처리할 수 있습니다. 특히 루프의 경우 실행을 중지하는 대신 사용자가 다시 입력할 수 있는 또 다른 기회를 제공하는 코드를 catch 블록에 넣는다고 가정합니다.

예시 2

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: