Try-Catch-Finally Block

try block
เป็น block ที่ใช้วางขอบเขตของการตรวจจับ code ที่น่าจะเกิด exception ซึ่งประกาศใช้ได้ใน method เท่านั้น

catch block 
เป็น block ที่ใช้ในการระบุประเภทของ exception ที่จะตรวจจับ และ ดำเนินงานจัดการ exception  เมื่อตรวจจับ exception ที่ตรงกับประเภทที่ระบุไว้ ซึ่งการประกาศจะประกาศใช้หลัง try block เท่านั้น

try block กำหนดขอบเขตของการตรวจจับ exception 
catch block ระบุประเภท exception ที่ต้องการตรวจจับและจัดการ exception 
เมื่อเกิด exception ใน try block จะโยนให้ catch block จัดการ
ดังนั้น try block และ catch block จะทำงานเสริมกัน

หลังจากจัดการกับ exception เสร็จโปรแกรมก็จะดำเนินการต่อไปจนจบ ไม่ยุติการทำงานกลางคัน

Syntax   try block และ catch block 

try{
// การทำงานต่างๆของโปรแกรม
}catch( (ระบุTypeException)  (ชื่อparameter) ){
//การทำงานเมื่อเกิด exception 
}

ตัวอย่าง Code ที่ปราศจากการจัดการ exception

จาก ตัวอย่างข้างบน โปรแกรมหยุดการทำงานหลังแจ้งเกิด exception 

ตัวอย่าง code ที่จัดการ exception


จากตัวอย่างข้างบน โปรแกรมสามารถดำเนินงานต่อไปได้หลัง exception ถูกจัดการ

ผังการทำงานประกอบความเข้าใจของ code 


จากรูป JVM จะ check ว่า exception มีการจัดการหรือไม่ ถ้าไม่ JVM จะจัดการตาม default exception handle นั่นคือ print บอกรายละเลียดของ exception ที่เกิด print บอกว่าเกิด exception ที่บรรทัดไหน และ ยุติโปรแกรม แต่ถ้ามีการจัดการ exception การทำงานจะทำต่อจนจบไม่ยุติกลางคัน


ถ้าคุณต้องการจะดักจับ exception หลายกรณีในทีเดียวก็สามารถทำได้เช่นกัน โดยใช้ multiple catch

ตัวอย่าง code




จาก code ข้างบน เมื่อมี exception เกิดขึ้นในเขต try จะถูกส่งไปตรวจจับที่ catch อันแรกก่อน หากไม่ตรงกับประเภทที่ระบุในการตรวจจับ จะส่งไปตรวจจับที่ catch อันต่อไปเรื่อยๆ

ข้อควรระวังการใช้ multiple catch : subclass ของ exception ต้องระบุตรวจจับก่อน superclass ของมันเสมอ ไม่งั้น compile error


ในบางสถานณ์การคุณอาจมีความจำเป็นต้องการตรวจจับ exception ใน try block ก็สามารถใช้ Nested try block ได้




finally block
เป็น block ที่ใช้ดำเนินการ code ที่สำคัญซึ่งจะขาดไม่ได้ก่อนที่จะสิ้นสุดโปรแกรม เช่น การปิด connection,stream,etc. เป็นต้น code ภายใน block นี้จะทำงานเสมอไม่สนว่าจะเกิด exception หรือไม่ หากเกิดก็ไม่สนว่าจะมีการจัดการ exception หรือไม่ 

ตัวอย่าง code เมื่อมีการจัดการ exception




 ตัวอย่าง code เมื่อไม่มีการจัดการ exception



ผังการทำงานของ finally block





ไม่มีความคิดเห็น:

แสดงความคิดเห็น