IllegalArgumentException được ném để chỉ ra rằng một phương thức đã được chuyển qua một đối số không hợp lệ. Ngoại lệ này mở rộng RuntimeException và do đó, thuộc về những ngoại lệ có thể được ném ra trong quá trình hoạt động của Máy ảo Java (JVM). Nó là một ngoại lệ không được kiểm tra và do đó, nó không cần phải được khai báo trong mệnh đề ném của một phương thức hoặc một phương thức khởi tạo.
Lý do sử dụng java.lang.IllegalArgumentException
- Khi Đối số nằm ngoài phạm vi. Ví dụ:tỷ lệ phần trăm phải nằm trong khoảng từ 1 đến 100. Nếu người dùng nhập 101 thì một IllegalArugmentExcpetion sẽ được ném.
- Khi định dạng đối số không hợp lệ. Ví dụ:nếu phương pháp của chúng tôi yêu cầu định dạng ngày như YYYY / MM / DD nhưng nếu người dùng chuyển YYYY-MM-DD. Sau đó, phương pháp của chúng tôi không thể hiểu được thì IllegalArugmentExcpetion sẽ được ném.
- Khi một phương thức cần chuỗi không trống làm tham số nhưng chuỗi rỗng được truyền.
Ví dụ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); } }
Đầu ra
45 Exception in thread "main" java.lang.IllegalArgumentException: 101 at Student.setMarks(Student.java:5) at Student.main(Student.java:15)
Các bước giải quyết IllegalArgumentException
- Khi IllegalArgumentException được ném ra, chúng tôi phải kiểm tra ngăn xếp cuộc gọi trong dấu vết ngăn xếp của Java và xác định phương thức tạo ra đối số sai.
- IllegalArgumentException rất hữu ích và có thể được sử dụng để tránh các trường hợp mã của ứng dụng phải xử lý dữ liệu đầu vào chưa được kiểm tra.
- Việc sử dụng chính của IllegalArgumentException này là để xác thực thông tin đầu vào đến từ những người dùng khác.
- Nếu chúng tôi muốn bắt được IllegalArgumentException thì chúng ta có thể sử dụng khối try-catch. Làm như vậy chúng ta có thể xử lý một số tình huống. Giả sử trong khối bắt nếu chúng ta đặt mã để tạo cơ hội khác cho người dùng nhập lại thay vì dừng quá trình thực thi, đặc biệt là trong trường hợp lặp lại.
Ví dụ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); } } } }
Đầu ra
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: