An IllegalArgumentException ถูกส่งออกไปเพื่อระบุว่าวิธีการได้ผ่านการโต้แย้งที่ผิดกฎหมาย ข้อยกเว้นนี้ขยาย RuntimeException คลาสและดังนั้นจึงเป็นข้อยกเว้นที่สามารถส่งออกได้ระหว่างการทำงานของ Java Virtual Machine (JVM) เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ ดังนั้นจึงไม่จำเป็นต้องประกาศในเมธอดหรือคำสั่งโยนของตัวสร้าง
สาเหตุของ java.lang.IllegalArgumentException
- เมื่ออาร์กิวเมนต์อยู่นอกขอบเขต ตัวอย่างเช่น เปอร์เซ็นต์ควรอยู่ระหว่าง 1 ถึง 100 หากผู้ใช้ป้อน 101 แล้ว IllegalArugmentExcpetion จะถูกโยนทิ้ง
- เมื่อรูปแบบอาร์กิวเมนต์ไม่ถูกต้อง ตัวอย่างเช่น หากวิธีการของเราต้องการรูปแบบวันที่ เช่น YYYY/MM/DD แต่ถ้าผู้ใช้ส่งผ่าน YYYY-MM-DD ถ้าอย่างนั้นวิธีการของเราก็ไม่เข้าใจ IllegalArugmentExcpetion จะถูกโยนทิ้ง
- เมื่อเมธอดต้องการสตริงที่ไม่ว่างเป็นพารามิเตอร์แต่ส่งผ่านสตริงว่าง
ตัวอย่าง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 ถูกส่งออกไป เราต้องตรวจสอบ call stack ใน Java's stack trace และค้นหาวิธีที่สร้างอาร์กิวเมนต์ที่ไม่ถูกต้อง
- The IllegalArgumentException มีประโยชน์มากและสามารถใช้เพื่อหลีกเลี่ยงสถานการณ์ที่โค้ดของแอปพลิเคชันจะต้องจัดการกับข้อมูลอินพุตที่ไม่ได้ตรวจสอบ
- การใช้งานหลักของ IllegalArgumentException . นี้ ใช้สำหรับตรวจสอบอินพุตที่มาจากผู้ใช้รายอื่น
- ถ้าเราต้องการจับ IllegalArgumentException จากนั้นเราก็สามารถใช้บล็อก try-catch ได้ การทำเช่นนี้เราสามารถจัดการกับบางสถานการณ์ได้ สมมติว่าใน catch block หากเราใส่โค้ดเพื่อให้ผู้ใช้มีโอกาสป้อนข้อมูลอีกครั้งแทนการหยุดการทำงานโดยเฉพาะในกรณีที่มีการวนซ้ำ
ตัวอย่าง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: