งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

1 การจัดการความผิดพลาด Error Handling. 2 วัตถุประสงค์  เพื่อศึกษาประเภทของข้อผิดพลาด  เพื่อศึกษาการเกิดและการควบคุมข้อผิดพลาด  เพื่อศึกษาการจัดการข้อผิดพลาด.

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "1 การจัดการความผิดพลาด Error Handling. 2 วัตถุประสงค์  เพื่อศึกษาประเภทของข้อผิดพลาด  เพื่อศึกษาการเกิดและการควบคุมข้อผิดพลาด  เพื่อศึกษาการจัดการข้อผิดพลาด."— ใบสำเนางานนำเสนอ:

1 1 การจัดการความผิดพลาด Error Handling

2 2 วัตถุประสงค์  เพื่อศึกษาประเภทของข้อผิดพลาด  เพื่อศึกษาการเกิดและการควบคุมข้อผิดพลาด  เพื่อศึกษาการจัดการข้อผิดพลาด

3 3 ประเภทของข้อผิดพลาด  Syntax Error  Run-Time Error  Logical Error

4 4 Syntax Error  เป็นการผิดพลายชนิดร้ายแรง เนื่องจากผิดหลัก หรือโครงสร้างของภาษา (Syntax or Symmetric) ความผิดพลาดประเภทนี้ไม่ สามารถคอมไพล์ได้เลย เช่น การไม่ได้ปิดคำสั่ง ด้วย ; เช่น System.out.Print( “ Hello ” )

5 5 Run – Time Error  เป็นความผิดพลาดที่ไม่ร้ายแรง ความผิดพลาด ประเภทนี้โปรแกรมสามารถคอมไพล์ได้ แต่ run ไม่ได้ เช่น การหารด้วย 0 หรือการอ้างขอบเขต ของ Array เกินกว่าที่กำหนดไว้ 1.class TestError { 2.public static void main(String s[]){ 3.System.out.Print( “ Hello ” +s[0]); 4.} 5.}

6 6 Logical Error  เป็นความผิดพลาดที่ตรวจพบยากมากเนื่องจาก โปรแกรมสามารถทำงานได้ตามปกติแต่ผลลัพธ์ ที่ออกนั้นไม่ตรงกับความเป็นจริง หรือให้ ผลลัพธ์ที่ไม่สอดคล้องกัน เดือนกุมภาพันธ์ มี 30 วัน เป็นต้น

7 7 การเกิด Error  โดยส่วนมากแล้วการเกิด Error ในโปรแกรมนั้น สาเหตุใหญ่ คือ การเกิดจากมนุษย์ ไม่ว่าจะเป็น Error อย่างใดก็ตาม ดังนี้ จุดที่สามารถป้องกัน Error เหล่านี้จึงสามารถทำได้ ตั้งแต่การ วิเคราะห์หรือการทำความเข้าใจกับระบบงาน เดิม จนกระทั่งถึงการตรวจสอบระบบงาน แต่ อย่างไรก็ตามกลไกของภาษาเองก็สามารถช่วย ในการตรวจสอบความผิดพลาดได้ ตั้งแต่ใน ระดับของ Syntax Error และ Run-Time Error โดยอาจแจ้งในรูปของ Error หรือ warning ตามลำดับ

8 8 กลไกการตรวจสอบ  ในภาษา assembly จะมีคำสั่ง Interrupt ซึ่งมี การทำงานดังนี้ interrupt Process to handle interrupt

9 9 ปัญหาการนำ Interrupt ไปใช้ใน ภาษาระดับสูง  ในภาษาระดับสูงบางครั้งการเกิด Interrupt นั้น ไม่สามารถบอกได้ว่าเกิดขึ้น ณ ที่ใดและเมื่อมี การหยุดการทำงานแล้ว มีการ Handle เรียบร้อย แล้ว การกลับมาทำงานบางครั้งไม่สามารถ กลับมาทำงานในตำแหน่งที่หยุดได้  ภาษระดับสูงที่ใช้ interpreter ก็อาจสามารถใช้ Interrupt ได้ เช่นใน Basic ทั้งนี้เนื่องจาก Operation ของภาษาระดับสูงคือประโยค ทั้งนี้ จากการแปลภาษาที่แปลทีละบรรทัดจึงรับรู้ว่า บรรทัดไหนที่มีความผิดพลาดเกิดขึ้น

10 10 กลไกการตรวจสอบในภาษาขั้นสูง  ในภาษาขั้นสูงเองก็มีกลไกการจัดการและการ ตรวจสอบเช่นเดียวกันกับ assembly ซึ่งจะอำนวย ความสะดวกอย่างมากในการเขียนโปรแกรม เช่น ในภาษา Ada เองก็มี Exception ซึ่งจะเป็นลักษณะของ Static Exception กล่าวคือ เมื่อโปรแกรม ( อยู่ภายใต้ begin – end block) ทำงานถึงจุดที่ผิดพลาด ก็จะเรียก ใช้หรือใช้งานการ when Exception ที่ ตรงกับ Exception ที่เกิดขึ้น เมื่อทำงาน เสร็จแล้วก็จะไปยังคำสั่ง end เพื่อทำงานต่อ begin exception when exception1 = > ; when exception1 = > ; other => ; end;

11 11 กลไกการตรวจสอบของภาษาจาวา  จาวาได้รับเอา Exception Handling เข้ามาเป็น ส่วนหนึ่งของภาษาโดยคอมไพเลอร์จะทำการ ตรวจสอบการใช้งาน exception handling อย่างเคร่งครัด ซึ่งภาษาจาวามีรูปแบบการใช้ งาน exception ดังนี้ try { ;} catch (Throwable1 t) { ;} catch (Throwable2 t) { ;} catch (Throwable3 t) { ;}

12 12 การทำงาน exception handling  จะคล้ายกับ Ada นั้นคือ ประโยคที่อยู่ใน try block นั้นจะเป็นประโยคที่ทำงานตามปกติ หาก ทำงานจนจบประโยค โดยไม่มีความผิดพลาด เกิดขึ้น ก็จะทำงานที่คำสั่งหลังประโยค catch block อันสุดท้าย แต่ถ้าหากมี error เกิดขึ้นใน try block โปรแกรมจะหยุดทำงานที่บรรทัดนั้น แล้วสร้าง instance ของ error หรือ exception และ throws ไปยังตำแหน่งที่มีความผิดพลาด ถ้าประโยคที่มีความผิดพลาดนั้นมี catch block ที่มีค่าพารามิเตอร์ตรงกับ exception ที่เกิดขึ้น ประโยคใน catch block นั้นก็ถูกทำงาน จากนั้น โปรแกรมจะทำงานในคำสั่งหลังประโยค catch block อันสุดท้าย

13 13 การทำงาน exception handling  หาก exception ที่ถูก throws ออกมาจาก ประโยคใน try block ที่ไม่มี catch block ดัก จับ exception จะถูกส่งออกมาจากเมธอดที่ เกิดความผิดพลาดไปยังเมธอดที่เรียกใช้งาน ซึ่งเรียกว่า exception propagation ถ้าเมธอด ที่เรียกใช้นั้นมีการจับ exception นั้นไปจัดการ ขบวนการก็สิ้นสุด แต่ถ้าไม่มีก็จะเกิด propagation ไปเรื่อย ๆ จนถ้า exception ออกจาก main แล้วก็จะถูก java interpreter จัดการ ดังนี้ 1. พิมพ์ exception 2. พิมพ์ activation stack เพื่อให้รู้ถึงจุดกำเนิดและเส้นทาง propagation 3. หยุดการทำงานของ JVM

14 14 main() Method 1 Method 2 call Exception พิมพ์ exception พิมพ์ activation stack หยุดการทำงาน ของ JVM

15 15 main() Method 1 Method 2 call Exception ดำเนินการตามที่ได้ดักจับ Exception

16 16 ข้อแตกต่างระหว่าง Interrupt และ Exception  Interrupt นั้นสามารถเกิดขึ้นที่เวลาใดก็ได้ บรรทัดใดก็ได้  Exception นั้นเกิดขึ้นกับประโยคบางประเภท บางลักษณะเท่านั้น ประโยชน์  ทำให้การเขียนนั้นโปรแกรมนั้นง่ายขึ้นเนื่องจาก มีการจำแนกและคาดการณ์ล่วงหน้าถึงคำสั่งที่ จะเกิด error ได้ง่าย ข้อเสีย  Overhead สูง

17 17 ตัวอย่าง 1.class ArrayOut { 2.public static void main(String s []) { 3.System.out.println("Hello " + s[0]); 4.} 5.} Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0 at ArrayOut.main(ArrayOut.java:3)

18 18 การเพิ่ม exception handling 1.class ArrayOut { 2.public static void main(String s []) { 3. try 4. { System.out.println("Hello " + s[0]); } 5. catch (ArrayIndexOutOfBoundsException e) 6. { System.out.println("Please try again" + 7. "with command line"); } 8.} 9.}

19 19 ตัวอย่าง 1.class TestExcep { 2.static void f(){int x = 0; float y = 1/x; } 3.public static void main(String s[]){ 4.try{ 5.f(); 6.}catch (Exception e){ 7.System.out.println("Error divice by 0" + e.getMessage());} 8.} 9.}

20 20 Throw Statements  ใช้สำหรับการโยน exception ในตำแหน่งที่ ต้องการออกมาออกมา throw จะตามด้วย instance ของ exception ที่จะถูกโยน หาก instance นั้นมีอยู่ก่อนก็สามารถโยนออกมาได้ เลย แต่ถ้าไม่มีต้องทำการสร้างขึ้นมาด้วยคำสั่ง new ก่อน คำสั่ง throw นั้นอาจอยู่ใน try block ทีมีการดักจับ exception หรือไม่ก็อยู่ใน method ที่มีการระบุว่าจะส่ง exception นั้น ออกมา

21 21 ตัวอย่าง 1.class ThrowTest { 2.static int div(int x, int y){ 3.try { 4.if (y == 0) 5.throw new Exception(); 6.return x/y; 7.} catch (Exception e){return x/y;} 8.} 9.public static void main(String s[ ]){ 10.System.out.println(div(1,0));} 11.}

22 22 Method that throws exception  คือการระบุหรือคาดหมายว่า method นั้นจะมี การ throws exception ออกมา โดยเราจะใช้ คำสั่ง throws หลังวงเล็บของพารามิเตอร์ตาม ด้วย class ของ exception ที่อาจถูกโยน ออกมา

23 23 ตัวอย่าง 1.class MethodThrows { 2.static int div(int x, int y) throws ArithmeticException { 3.return x/y; } 4.public static void main(String s[]){ 5.System.out.println(div(1,0)); 6.} 7.}

24 24 ตัวอย่าง 1.import java.lang.* ; 2.import java.io.* ; 3.public class Square { 4. public static void main ( String[] a ) throws IOException { 5. BufferedReader stdin = new BufferedReader (new InputStreamReader( System.in) ); 6. String inData; 7. int num ; 8. System.out.println("Enter an integer:"); 9. inData = stdin.readLine(); 10. num = Integer.parseInt( inData ); // convert inData to int 11. System.out.println("The square of " + inData + " is " + num*num ); } }

25 25 Finally block  คือบล็อกที่เป็น option ว่ามีหรือไม่ก็ได้ ถ้ามีมี ได้เพียง 1 block เป็นบล็อกที่ทำงานเสมอ ไม่ ว่าโปรแกรมจะผ่าน try หรือ catch block หรือไม่ try { ; } catch ( ){ ; } finally{ ; }

26 26 1.class ArrayOut { 2.public static void main(String s []) { 3. try 4. { System.out.println("Hello " + s[0]); } 5. catch (ArrayIndexOutOfBoundsException e) 6. { System.out.println("Please try again" + 7. "with command line"); } 8. finally 9. {System.out.println("How are you. ");} 10.} 11.}


ดาวน์โหลด ppt 1 การจัดการความผิดพลาด Error Handling. 2 วัตถุประสงค์  เพื่อศึกษาประเภทของข้อผิดพลาด  เพื่อศึกษาการเกิดและการควบคุมข้อผิดพลาด  เพื่อศึกษาการจัดการข้อผิดพลาด.

งานนำเสนอที่คล้ายกัน


Ads by Google