“อ๊ะ นี่เธอ ฉันตามหาเธออยู่นะ”

"บางสิ่งบางอย่างเกิดขึ้นได้อย่างไร?"

“ไม่ค่ะ เรายังเรียนอยู่”

"ตกลง ฉันกำลังฟังอยู่"

"ฉันต้องการบอกคุณอีกสองสามอย่างเกี่ยวกับข้อยกเว้น:"

"ใน Java 7 โครงสร้าง try-catchถูกขยายออกไปเล็กน้อยโดยการเพิ่ม บล็อก catch หลายอันดูตัวอย่างนี้:"

จาวา 5
try
{}
 catch (IOException ex)
{
 logger.log(ex);
 throw ex;
}
 catch (SQLException ex)
{
 logger.log(ex);
 throw ex;
}
จาวา 7
try
{}
 catch (IOException | SQLException ex)
{
 logger.log(ex);
 throw ex;
}

"ตอนนี้เราสามารถเขียนข้อยกเว้นหลายรายการโดยคั่นด้วยตัวดำเนินการ OR ('|' เป็นไบนารี OR) ได้หรือไม่

“นั่นสินะ ไม่สะดวกเหรอ?”

"อืม แต่ประเภทของวัตถุยกเว้นใน catch block จะเป็นอย่างไร"

"ท้ายที่สุด IOException ก็มีเมธอดของมัน และ SQLException ก็มีเมธอดของมัน"

"ประเภทข้อยกเว้นจะเป็นประเภทบรรพบุรุษร่วมกัน"

"อ่า กล่าวอีกนัยหนึ่ง น่าจะเป็นExeptionหรือRuntimeExceptionถ้าอย่างนั้น ทำไมไม่เขียน catch(Exception e)"

"บางครั้งเมื่อต้องจัดการข้อผิดพลาดทีละรายการ การจัดกลุ่มข้อผิดพลาด การเขียนบันทึกข้อผิดพลาด การโยนข้อผิดพลาดใหม่ และการจัดการข้อผิดพลาดด้วยวิธีอื่น"

"อีกนัยหนึ่ง โครงร่างนี้ได้รับการยอมรับว่าเป็นการแก้ปัญหาของบล็อก catch ที่ซ้ำกันสำหรับการจัดการข้อผิดพลาดต่างๆ"

“อ่า ฉันเข้าใจแล้ว ขอบคุณ เอลลี่”

"นั่นไม่ใช่ทั้งหมด ฉันอยากจะบอกคุณอีกเล็กน้อยเกี่ยวกับ ด่าน สุดท้าย "

"อย่างที่คุณทราบอยู่แล้ว บล็อกนี้จะถูกดำเนินการเสมอ"

"และเมื่อฉันพูดว่า เสมอ ฉันหมายถึงเสมออย่างแน่นอน "

"ตัวอย่างเช่น:"

ตัวอย่างการใช้งาน สุดท้าย
try
{
 return 1;
}
 finally
{
 return 0;
}

"ที่นี่มีการส่งคืนใน บล็อก tryและส่งคืนใน บล็อก สุดท้ายดังนั้นค่าส่งคืนของเมธอดนี้จะเป็นเลข 0"

" บล็อก สุดท้ายจะดำเนินการไม่ว่าจะเกิดอะไรขึ้น และ คำสั่ง returnจะเขียนทับค่าที่ส่งคืนอื่นด้วยค่าของมันเอง"

"ฉันเห็น."

"อย่างไรก็ตามเมธอดสามารถคืนค่าหรือโยนข้อยกเว้น "

"ดังนั้นหากมีการส่งคืนค่าในบล็อกการลอง แต่บล็อกสุดท้ายแสดงข้อยกเว้นผลลัพธ์ที่ได้จะเป็นข้อยกเว้น "

"จะเกิดอะไรขึ้นหากเกิดข้อยกเว้นใน บล็อก ลองแต่ บล็อก สุดท้ายมีคำสั่งส่งคืน"

"จากนั้นจะเหมือนกับว่าวิธีการทำงานอย่างถูกต้องและค่าในคำสั่ง return จะถูกส่งกลับ

ตัวอย่าง ผลลัพธ์
try
{
 return 1;
}
 finally
{
 return 0;
}
0
try
{
 return 1;
}
 finally
{
 throw new RuntimeException();
}
ข้อยกเว้นรันไทม์
try
{
 throw new RuntimeException();
}
 finally
{
 return 0;
}
0
try
{
 throw new RuntimeException();
}
 finally
{
 throw new IOException();
}
IOข้อยกเว้น

"เหตุผลเดียวที่เมธอดสุดท้ายอาจไม่ทำงานก็คือการยุติโปรแกรมทันทีโดยการเรียกเมธอดSystem.exit(); "

ตัวอย่าง
try
{
 System.exit(0);
 return 1;
}
 finally
{
 return 0;
}

"ฉันเห็น."

"โปรดจำไว้ว่าหัวข้อเหล่านี้มักจะถูกถามในการสัมภาษณ์ ดังนั้นจะเป็นการดีสำหรับคุณที่จะทำความเข้าใจและจดจำหัวข้อเหล่านั้น"