[Java] Exception เขียนยังไง

ใน Java ถ้าเราใช้ IDE เก่งๆ เวลาเราเขียน source code ที่มีจุดสำคัญ หรือมีผลกระทบต่อการทำงานของโปรแกรมขณะ runtime จะมีการแจ้งเตือนเลยว่าเราต้องจัดการกับ Exception ด้วย แต่ถ้าเราใช้เครื่องมือช่วยแบบไม่เข้าใจมัน มันก็เกะกะเกินไปได้

ในภาษา Java นั้นมี exception อยู่ 5 ตัวครับ exception ทั้ง 5 นายนี้มีชื่อว่า try, catch, throws, throw และ finally ครับ

try
โค้ดที่เขียนในส่วนนี้จะเป็นชุดคำสั่งที่จะเริ่มเข้าทดสอบใน exception ครับ แปลตรงไปตรงมาตามชื่อเลยก็คือ "ลอง(try)" ครับ โค้ดส่วนนี้จะถูกลองทำก่อน ถ้ามีปัญหาเกิดขึ้น เช่น หาฐานข้อมูลไม่เจอ โหลดไฟล์ไม่ได้ ก็จะทำให้โค้ดหลังจากจุดที่เกิด error ไปถึงจุดปิด scope ของ try จะถูกข้ามไปเลยครับ ซึ่งถ้าเราใส่ try ไปแล้ว compiler จะบังคับให้เรามี catch หรือ finally ด้วยครับ


catch
คำสั่ง catch จะถูกทำก็ต่อเมื่อมี exception เกิดขึ้นใน try ครับ หากมีปัญหาเกิดขึ้น จะมีการเรียกชุดคำสั่งใน catch ทันทีครับ แต่ catch จะต้องการ parameter ด้วย ซึ่งก็คือ ชนิดของ exception ครับ เช่น ต้องการดัก FileNotFoundException, IOException หรืออื่นๆ ซึ่ง 1 try อาจมาคู่กับหลาย catch ก็ได้ครับ


throws
ต่างจากตัวอื่นตรงที่ไม่ได้ใช้ภายใน method แต่จะเขียนกำกับไว้ที่ method header ทำหน้าที่ส่ง exception ที่เกิดขึ้น ไปให้ตัวที่เรียก แปลว่าการทำงานจะสัมพันธ์กันระหว่าง 2 methods โดย throws นั้นทำหน้าที่แค่ ส่งต่อไปให้ method ที่เรียกตัวเองเท่านั้น ไม่สามารถควบคุมว่าจะให้ทำอะไรต่อได้


throw
เป็นการโยน error ชนิดนั้นๆออกมาจาก ณ จุดเกิดเหตุครับ มักใช้สำหรับคลาสที่ยังไม่ต้องการจะจัดการ error ตอนนั้น คือ throw กลับขึ้นไปให้เมธอดที่เรียกมันเป็นตัวจัดการเองครับ โดยลำดับนั้นก็จะเป็นไปตาม stack ครับ โดยการที่จะใช้ throw เราต้องใส่ throws ด้วย


finally
สำหรับ finally นั้นมีการทำงานคล้าย catch เลยครับ แต่จะต่างตรงที่ finally จะถูกทำทุกกรณี ไม่ว่าจะ try สำเร็จหรือติด catch จะมีการวิ่งเข้า finally ทุกครั้ง

public void exceptionExample() throws Exception {
     try {


     } catch (Exception ex) {
          throw ex;
     } finally {

     }
}


สิ่งสำคัญคือ ลูกเล่นที่จะมาใช้กับมันครับ เช่น ถ้าเกิดซ้อนกันหลายชั้นจะเป็นอย่างไร ถ้าแสดง log แล้วทำอย่างไรไม่ให้ซ้ำซ้อน เป็นต้น ซึ่งถ้าเข้าใจจุดนี้ดีแล้ว การเขียน Exception สำหรับงานจริงก็จะมีประสิทธิภาพมากขึ้นครับ





https://code.function.in.th/java/exception
https://en.wikipedia.org/wiki/Exception_handling_syntax
https://citecclub.org/forum/java-41/สอน-try-catch-exception-756/
https://www3.ntu.edu.sg/home/ehchua/programming/java/J5a_ExceptionAssert.html

Facebook Comment

Popular post of 7 days

[Java] ความแตกต่างระหว่าง Overloading กับ Overriding

ลืมรหัสปลดล็อค Android เข้าเครื่องไม่ได้ มีทางออกครับ

[Android] เปิดเครื่องไม่ได้ โลโก้ค้าง (Boot Loop)