
"วันนี้ฉันอยากจะพูดอีกเรื่องหนึ่ง ใน Java ข้อยกเว้นทั้งหมดจะแบ่งออกเป็นสองประเภท: ทำเครื่องหมายและไม่ได้ทำเครื่องหมาย (สิ่งที่ต้องตรวจจับได้ และสิ่งที่ไม่ต้องตรวจจับ) ตามค่าเริ่มต้นข้อยกเว้น ทั้งหมด ต้องเป็น จับได้."
"คุณจงใจโยนข้อยกเว้นในโค้ดของคุณได้ไหม"
"คุณสามารถโยนข้อยกเว้นใดๆ ลงในโค้ดของคุณเองได้ คุณยังสามารถเขียนข้อยกเว้นของคุณเองได้ แต่เราจะพูดถึงเรื่องนี้ในภายหลัง ตอนนี้ เรามาเน้นที่ข้อยกเว้นที่โยนโดย Java Machine"
"ตกลง."
"หากClassNotFoundExceptionหรือFileNotFoundExceptionถูกโยน (เกิดขึ้น) ในเมธอด ผู้พัฒนาต้องระบุในเมธอดการประกาศ สิ่งเหล่านี้คือ ข้อยกเว้นที่ มีการตรวจสอบนี่คือลักษณะที่ปรากฏ:"
ตัวอย่างของข้อยกเว้นที่ตรวจสอบ |
---|
|
|
|
"เราแค่เขียน 'throws' ตามด้วยรายการข้อยกเว้นที่คั่นด้วยเครื่องหมายจุลภาค ใช่ไหม"
"ใช่ แต่ยังมีอีกมาก เพื่อให้โปรแกรมคอมไพล์ เมธอดที่เรียกใช้method1
ในตัวอย่างด้านล่างต้องทำอย่างใดอย่างหนึ่งจากสองสิ่งต่อไปนี้: จับข้อยกเว้นเหล่านี้หรือโยนใหม่ (ให้กับผู้เรียก)โดยระบุข้อยกเว้นที่เปลี่ยนใหม่ในการประกาศ "
"อีกครั้ง ถ้าเมธอดหลักของคุณต้องการเรียกเมธอดที่มีการประกาศว่า ' throws FileNotFoundException , …' คุณต้องทำอย่างใดอย่างหนึ่งต่อไปนี้:
1) จับ FileNotFoundException , …
คุณต้องห่อโค้ดที่เรียกใช้เมธอดที่ไม่ปลอดภัยในบล็อกtry-catch
2) อย่าจับ FileNotFoundException , …
คุณต้องเพิ่มข้อยกเว้นเหล่านี้ใน รายการ โยนของ วิธีการ หลัก ของคุณ "
"คุณช่วยยกตัวอย่างให้ฉันได้ไหม"
"ดูที่นี้:"
public static void main(String[] args)
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"โค้ดในตัวอย่างนี้จะไม่คอมไพล์ เนื่องจาก เมธอด หลักเรียกใช้method1()ซึ่งจะโยนข้อยกเว้นที่ต้องตรวจจับ"
"ในการคอมไพล์ เราจำเป็นต้องเพิ่มการจัดการข้อยกเว้นให้กับเมธอดหลัก คุณสามารถทำได้ด้วยวิธีใดวิธีหนึ่งจากสองวิธี:"
public static void main(String[] args) throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"และที่นี่เราจับมันด้วยการลองจับ :"
public static void main(String[] args)
{
try
{
method1();
}
catch(Exception e)
{
}
}
public static void method1() throws FileNotFoundException, ClassNotFoundException
{
//Throws FileNotFoundException if the file doesn't exist
FileInputStream fis = new FileInputStream("C2:\badFileName.txt");
}
"เริ่มชัดเจนขึ้นแล้ว"
"ดูตัวอย่างต่อไปนี้ จะช่วยให้คุณเข้าใจส่วนที่เหลือ"
public static void method2() throws FileNotFoundException, ClassNotFoundException
{
method1();
}
public static void method3() throws ClassNotFoundException
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
}
public static void method4()
{
try
{
method1();
}
catch (FileNotFoundException e)
{
System.out.println("FileNotFoundException has been caught.");
}
catch (ClassNotFoundException e)
{
System.out.println("ClassNotFoundException has been caught.");
}
}
"มีข้อยกเว้นอีกประเภทหนึ่งคือ RuntimeExceptionและคลาสที่สืบทอดมา คุณไม่จำเป็นต้องจับข้อยกเว้นเหล่านี้ สิ่งเหล่านี้เป็นข้อยกเว้นที่ไม่ได้ตรวจสอบ พวกเขาถือว่าคาดเดาได้ยาก คุณสามารถจัดการกับพวกเขาในลักษณะเดียวกัน แต่คุณ ไม่จำเป็นต้องระบุไว้ใน ประโยค โยน "
GO TO FULL VERSION