Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การจัดการข้อยกเว้นด้วย Try-Catch ใน Java

แม้โปรแกรมเมอร์เก่งที่สุดก็ยังเขียนโค้ดผิดพลาดได้ ข้อผิดพลาดอาจมาจาก typo, อินพุตจากผู้ใช้ที่ไม่คาดคิด หรือสาเหตุอื่นๆ ที่ติดตามยาก

ที่นี่ การจัดการข้อยกเว้น (Exception Handling) เข้ามาช่วย โค้ดที่ดีควรมี exception handlers ที่ตอบสนองต่อข้อผิดพลาดแบบกำหนดไว้ล่วงหน้า มีประโยชน์เพราะบอกโปรแกรมว่าต้องทำอย่างไรเมื่อเกิดข้อผิดพลาด

ใน Java ใช้บล็อก try...catch สำหรับจัดการข้อยกเว้น บทช่วยสอนนี้อธิบายพื้นฐาน การใช้ try-catch และคำสั่ง finally พร้อมตัวอย่าง

ข้อยกเว้น (Exceptions) ใน Java

Exceptions คือเหตุการณ์ไม่คาดคิดระหว่างรันโปรแกรม ขัดจังหวะการทำงาน และอาจทำให้โปรแกรมหยุดก่อนเสร็จ

สาเหตุหลากหลาย: เข้าถึงเซิร์ฟเวอร์ไม่ได้, ข้อผิดพลาดโค้ด, typo, เปิดไฟล์ไม่มีอยู่, อินพุตผิดจากผู้ใช้ ฯลฯ

Error vs Exception: Error คือสภาวะที่โปรแกรมกู้คืนไม่ได้ (เช่น หน่วยความจำเต็ม) ไม่ได้จัดการโดยนักพัฒนาปกติ แต่ Exception เป็นปัญหาในโปรแกรมที่จัดการได้ เมื่อเกิด exception จะสร้าง exception object เก็บข้อมูล เช่น ชื่อ exception และตำแหน่งที่เกิด

Try-Catch ใน Java

คำสั่ง try...catch ใช้จัดการ exceptions วางโค้ดที่อาจเกิดข้อผิดพลาดไว้ในบล็อก try ตามด้วย catch

เมื่อเจอ try-catch โปรแกรมจะรันโค้ดใน try ก่อน หากเกิด exception โค้ดใน catch จะรันทันที catch ต้องอยู่หลัง try เสมอ

ไวยากรณ์:

try { 
    // Code to run 
} catch (ExceptionType error) { 
    // Code to run when exception is raised 
} finally { 
    // Code to run even if exception is not raised 
}

บล็อก finally จะกล่าวถึงต่อไป ตอนนี้เน้น try-catch ก่อน

ตัวอย่าง Try-Catch

สร้างโปรแกรมมีอาร์เรย์ studentNames 6 คน ต้องการพิมพ์คนที่ 5 (index 5 = คนที่ 6) แต่มีแค่ 5 คน -> เกิด error

class Main { 
    public static void main(String[] args) { 
        String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; 
        System.out.println(studentNames[5]); 
    } 
}

ผลลัพธ์: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 5 out of bounds for length 5

ใช้ try-catch จัดการ: เมื่อ error ให้พิมพ์ "There was an error."

class Main { 
    public static void main(String[] args) { 
        try { 
            String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; 
            System.out.println(studentNames[5]); 
        } catch (Exception e) { 
            System.out.println("There was an error."); 
        } 
    } 
}

ผลลัพธ์: There was an error.

สามารถมีหลาย catch blocks เพื่อจัดการ exception แต่ละประเภทต่างกัน

ตัวอย่าง: catch ArrayIndexOutOfBoundsException แบบเฉพาะเจาะจง และ catch Exception ทั่วไป

class Main { 
    public static void main(String[] args) { 
        try { 
            String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; 
            System.out.println(studentNames[5]); 
        } catch (ArrayIndexOutOfBoundsException e) { 
            System.out.println("ArrayIndexOutOfBoundsException was raised."); 
        } catch (Exception e) { 
            System.out.println("There was an error."); 
        } 
    } 
}

ผลลัพธ์: ArrayIndexOutOfBoundsException was raised. เพราะ exception นี้เกิดจริง หาก error อื่น จะเข้า catch ทั่วไป พิมพ์ "There was an error."

คำสั่ง Finally

finally ใช้รันโค้ดหลัง try-catch เสร็จสิ้น เป็น optional และ รันเสมอ ถ้าประกาศไว้ ไม่ว่า exception จะเกิดหรือไม่ก็ตาม ไม่เกิด -> รันหลัง try block เกิด -> รันหลัง catch block

ตัวอย่าง: เพิ่ม finally พิมพ์ "This block has finished executing."

class Main { 
    public static void main(String[] args) { 
        try { 
            String[] studentNames = {"Linda", "Greg", "Ron", "Graham", "Alexis"}; 
            System.out.println(studentNames[5]); 
        } catch (ArrayIndexOutOfBoundsException e) { 
            System.out.println("ArrayIndexOutOfBoundsException was raised."); 
        } catch (Exception e) { 
            System.out.println("There was an error."); 
        } finally { 
            System.out.println("This block of code has finished executing."); 
        } 
    } 
}

ผลลัพธ์:

ArrayIndexOutOfBoundsException was raised.
This block of code has finished executing.

เห็นว่า catch ทำงาน แล้ว finally ทำงานต่อท้าย

สรุป

บล็อก try...catch ใช้จัดการ exceptions อย่างสง่างาม โค้ดใน try รัน กรณีมี exception -> catch ที่ตรงกันรัน นอกจากนี้ finally รันหลัง try-catch เสร็จ แม้ไม่มี exception ก็ตาม บทช่วยสอนนี้อธิบาย try-catch และ finally พร้อมตัวอย่าง ตอนนี้คุณจัดการ exceptions ใน Java ได้อย่างมั่นใจแล้ว!