บทที่ 6

จุดประสงค์เชิงพฤติกรรม (Behavioral Objectives)
หลังจากศึกษาจบบทเรียนนี้แล้ว ผู้เรียนจะมีความสามารถดังนี้
1.บอกขั้นตอนการจัดการเหตุการณ์ที่เกิดขึ้นในแบบต่างๆ ในภาษาจาวา
2.จำแนกประเภทของเหตุการณ์ใน Java awt
3.ยกตัวอย่าง ActionListener
4.ยกตัวอย่าง MouseListener
5.บอกสาเหตุข้อผิดพลาดของการเขียนโปรแกรม
6.อธิบายรูปแบบของ Exception Handling ด้วยคีร์คำสั่ง try-catch
7.ปฏิบัติการคีร์คำสั่ง Throw ใน Exception
8.บอกโครงสร้าง Exception Class


คอมโพเนนต์ที่สามารถกำหนดเหตุการณ์ได้ (Event Components)
คอมโพเนนต์นี้ คือ คลาสย่อยของ java.awt.Component ซึ่งสามารถสร้างเหตุการณ์ซึ่งอาจ
เป็นปุ่ม (Button) กล่องข้อความ (TextField) หรือ เฟรม (Frame) ก็ได้

คลาสที่เกี่ยวข้องกับเหตุการณ์ (Event Classes)
เหตุการณ์ที่จะถูกสร้างขึ้นด้วยคลาสที่เกี่ยวข้อง เช่น Button ก็จะมี ActionEvent หรือ
Checkbox จะมี ItemEvent เป็นต้น ทั้งหมดนี้จะอยู่ในแพ็กเกจ java.awt.event โดยส่วนใหญ่แล้ว
เวลานำไปใช้มักจะอ้างอิงรวมโดยการ import java.awt.* ซึ่งหมายถึงนำเข้าแพ็กเกจทั้งหมดตั้งแต่
java.awt



การจัดการข้อผิดพลาดในภาษาจาวา (Java Exception)
การเขียนโปรแกรม เรามักจะพบข้อผิดพลาดที่เกิดขึ้นในการเขียนโปรแกรมไม่มากก็น้อย
ในอดีตการเขียนโปรแกรมแบบโครงสร้าง เมื่อผิดพลาดไม่ว่าจะเป็นผิดมากเล็กน้อยเมื่อทำคอมไพล์
แล้วมีการใช้ผิดพลาดขึ้นโปรแกรมจะไม่สามารถแก้ไขได้ เว้นแต่ว่าจะปิดแล้วเปิดใหม่เพื่อใช้งานให้ถูกต้อง
เราจะแยกปัญหาออกเป็นสองแบบ คือ สิ่งที่เกิดขึ้นขณะคอมไพล์ (Compile Time) และเกิดขึ้นขณะรันโปรแกรม
(Run-time) ปัญหาชนิด Compile-time นั้นจะพบได้ในขั้นตอนเขียนโปรแกรมส่วนสิ่งที่เกิดขึ้นขณะรันนั้นจะ
มีผลต่อการทำงานโปรแกรมมากกว่า เรียกว่า "Exceptions"

Exception Handling ที่ระบบสร้างมาให้
การเกิด Exception แบบนี้ภาษาจาวาสร้างกลไกรองรับไว้แล้ว ดังนี้
1.ไม่สามารถพบไฟล์ที่อ้างถึง จะถูกดูแลโดยคลาส FileNotFoundException
2.ไฟล์ที่อ้างถึงมีรูปแบบที่ผิดพลาด ตัวอย่างเช่น ไฟล์มีส่วนขยาย .txt แต่เราต้องการไฟล์ .java จะดูแลโดยคลาส ClassNotFoundException
3.ไม่สามารถเชื่อมต่อเครือข่ายได้จะถูกดูแลโดยคลาส MalformedURLException
4.การคำนวณผิดพลาดทางคณิตศาสตร์ เช่น การหารด้วยศูนย์ทางคณิตศาสตร์ไม่สามารถทำได้ จะถูกดูแลโดยคลาส ArithmeticException
5.มีการผิดพลาดที่เกิดจากอาร์เรย์ เช่น อาจอ้างอิง Index ที่ไม่มีตามการประกาศไว้จะถูกดูแลโดยคลาส ArrayIndexOutOfBoundsException
6.การพักการทำงานของเทรดอาจถูกรบกวน จะถูกดูแลโดยคลาส InterruptedException
7.ระบบไม่สามารถแปลงข้อมูลไปเป็นระบบอื่นๆ ได้จะถูกดูแลโดยคลาส NumberFormatException

    ในที่นี้จะขอยกตัวอย่างมาพอสังเขป


คีร์คำสั่ง Throw ใน Exception
ในการจัดการ Exception บางครั้งก็ไม่สามารถระบุข้อผิดพลาดที่ชัดเจนได้ จึงต้องโยนไปยัง คลาสที่เหนือกว่าเพื่อแจ้งกลับข้อผิดพลาดที่เกิดขึ้น โดยลักษณะการทำงานจะเป็นการแจ้งข้อผิดพลาดต่อๆ กันไป เหมือนกับการแจ้งหน่วยเหนือรับทราบว่าเกิดอะไรขึ้นนั่นเอง 

6.1  การแจ้งขอ้ผิดพลาดที่ต่อๆกัน
ในกรณีที่มี Exceptionเกิดขึ้น โปรแกรมจะทำคำสั่งที่อยู่ใน Catch Block ที่สอดคล้องกับ Exception ก่อนที่จะทำใน Finally Block ถ้ามีการใช้คำสั่ง return ภายใน try Blockคำสั่งใน Finally Block จะถูกทำงานก่อนจะถูกส่งกลับไป

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

6.2 คลาสที่รับผิดชอบในการจัดการ Exception

Exception ที่นักพัฒนาสร้างขึ้นมาเอง
Exception Handling หากเราต้องการสร้าง Exception ขึ้นมาเองนั้น ต้องทำการสืบทอดการจัดการ Exception
จากคลาสที่เป็นแม่แบบ หลังจากนั้นก็ทำการสร้าง Exception ของตัวเองซึ่งหากไม่สามารถระบุได้ก็จะโยน
การแจ้งเตือนไปยังคลาสที่อยู่เหนือกว่า ดังรูปต่อไปนี้

    ตัวอย่างที่ 6.6

    ตัวอย่างที่ 6.7


ผลการรันโปรแกรมตัวอย่างที่ 6.7

ความคิดเห็น