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

Slides:



Advertisements
งานนำเสนอที่คล้ายกัน
โครงสร้างโปรแกรมภาษา JAVA
Advertisements

Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
บทที่ 2 รหัสควบคุมและการคำนวณ
Introduction to C Introduction to C.
โครงสร้างโปรแกรมภาษา C
ครั้งที่ 8 Function.
Control Statement if..else switch..case for while do-while.
สายอักขระและ การประมวลผลสายอักขระ (String and String manipulation)
Control structure part II
05_3_Constructor.
เนื้อหา ประเภทของโปรแกรมภาษา ขั้นตอนการพัฒนาโปรแกรม
ปฏิบัติการครั้งที่ 9 ฟังก์ชัน.
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
C Programming Lecture no. 6: Function.
การออกแบบโปรแกรมอย่างมีโครงสร้าง Structured Design
Network programming Asst. Prof. Dr. Choopan Rattanapoka
Network programming Asst. Prof. Dr. Choopan Rattanapoka
การเขียนโปรแกรมเชิงวัตถุ ด้วยภาษาจาวา
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (4) (Class & Object)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
บทที่ 4 Method (1).
Inheritance การสืบทอดคลาส
String Class มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
อาร์เรย์ หรือแถวลำดับ (Array)
input from keyboard มหาวิทยาลัยเนชั่น การโปรแกรมเชิงวัตถุด้วยภาษา JAVA
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 15 มิถุนายน 2550 Structure Programming มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 7 มิถุนายน 2556 Text File Processing มหาวิทยาลัยเนชั่น.
Page: 1 การโปรแกรมเชิงวัตถุด้วยภาษา JAVA บุรินทร์ รุจจนพันธุ์.. ปรับปรุง 22 มิถุนายน 2550 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 11 การเขียนโปรแกรมแบบ Structured Programming และการจัดการตรวจสอบข้อผิดพลาด.
บทที่ 6 เมธอด.
ทำงานกับ File และStream
Handling Exceptions & database
ง30212 การเขียนโปรแกรมภาษาคอมพิวเตอร์ โรงเรียนปลวกแดงพิทยาคม
โปรแกรมภาษาจาวาเบื้องต้น Basic Java Programming 3(2-2-5)
บทที่ 3 การวิเคราะห์ Analysis.
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
Object Oriented Programming Handling Exceptions
Method of Class อ.สุพจน์ สิงหัษฐิต
ทบทวน กันก่อน .....กระบวนการแปลโปรแกรม
Week 2 Variables.
เสรี ชิโนดม ฟังก์ชัน เสรี ชิโนดม
Computer Programming for Engineers
บทที่ 10 คำสั่งควบคุม OUTLINE 1. คำสั่งแบบเรียงลำดับ (Sequence)
วิทยา กรระสี (วท.บ. วิทยาการคอมพิวเตอร์)
ฟังก์ชัน.
คำสั่งเงื่อนไข (Condition Statement)
CHAPTER 4 Control Statements
บทที่ 2 การแสดงผลและรับข้อมูล
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
Java Programming Java Structure and Datatype,Variable
Chapter 3 - Stack, - Queue,- Infix Prefix Postfix
BCS 121 บท 5 การโปรแกรมเชิงวัตถุ (Object-Oriented Programming)
Recursive Method.
stack #2 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การแสดงผลและการรับข้อมูล (Data Output and Input)
โครงสร้าง ภาษาซี.
Java Network Programming 1
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
TECH30201 Object-Oriented Programming
การกระทำทางคณิตศาสตร์
stack #1 ผู้สอน อาจารย์ ยืนยง กันทะเนตร
การจัดการกับความผิดปกติ
Variable, Data type, Expression, Operators Data input, Data output
เริ่มต้นเขียนโปรแกรมภาษาจา วา (Introduction to JAVA Programming)
Chapter 6 Abstract Class and Interface
Chapter 5 การจัดการข้อผิดพลาด (Exception Handling)
Creating And Using Exceptions
Object-Oriented Programming Paradigm
Chapter 10 Exception Handling
ใบสำเนางานนำเสนอ:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

class ArrayOut { public static void main(String s []) { try { System.out.println("Hello " + s[0]); } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Please try again" + "with command line"); } finally {System.out.println("How are you. ");} }