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: