การจัดการกับความผิดปกติ

Slides:



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

The InetAddress Class.
Suphot Sawattiwong Function ใน C# Suphot Sawattiwong
Introduction to C Introduction to C.
โครงสร้างโปรแกรมภาษา C
การจัดการความผิดพลาด
BC322 ครั้งที่ 6 Text file BC322 : computer Programming (Week6)
บทที่ 3 ตอนที่ 1 คำสั่งเงื่อนไขและการตัดสินใจ(p
Control structure part II
6. โครงสร้างข้อมูลแบบแฟ้ม
File.
การเขียนโปรแกรมภาษาจาวาตอนที่ ๓
Lecture no. 10 Files System
ครั้งที่ 7 Composition.
การประกาศตัวแปร “ตัวแปร” คือสิ่งที่เราสร้างขึ้นมาเพื่อใช้เก็บค่าต่างๆและอ้างอิงใช้งานภายในโปรแกรม ตามที่เรากำหนดขึ้น การสร้างตัวแปรขึ้นมาเราเรียกว่า.
หลักการเชิงวัตถุ อาจารย์ศิริพร ศักดิ์บุญญารัตน์
Network programming Asst. Prof. Dr. Choopan Rattanapoka
Network programming Asst. Prof. Dr. Choopan Rattanapoka
Network programming Asst. Prof. Dr. Choopan Rattanapoka
Network programming Asst. Prof. Dr. Choopan Rattanapoka
การสืบทอด (Inheritance)
บทที่ 3 Class and Object (1) การสร้างและการใช้งานคลาส
คลาสและวัตถุ (2) (Class & Object)
 เป็นเมธอดที่มีคุณลักษณะของ Polymorphism รูปแบบหนึ่ง โดยใช้ชื่อเมธอดเดียวกัน มากกว่า 1 เมธอด เพื่อทำงานในแบบเดียวกัน  คลาสลูกสามารถเขียนทับ เมธอดของคลาสแม่ได้
บทที่ 1 หลักการเขียนโปรแกรมเชิงวัตถุ
คลาสและวัตถุ (3) (Class & Object)
คลาสและวัตถุ (2) (Class & Object)
คลาสและวัตถุ (3) (Class & Object). w5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 24, 25 as5_000.rar การใช้งานเมธอดภายในคลาสเดียวกัน ข้อ 23 2.
บทที่ 4 Method (1).
File I/O (1) โปรแกรมจะอ่านหรือเขียนข้อมูลผ่านท่อส่งข้อมูล (Stream)
การสืบทอดคุณสมบัติ (Inheritance)
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 ความผิดพลาดที่พบ บ่อย มหาวิทยาลัยเนชั่น.
บทที่ 7 คำสั่งสำหรับเขียนโปรแกรม
บทที่ 11 การเขียนโปรแกรมแบบ Structured Programming และการจัดการตรวจสอบข้อผิดพลาด.
บทที่ 6 เมธอด.
ทำงานกับ File และStream
Handling Exceptions & database
โครงสร้างควบคุมการทำงาน
โปรแกรมภาษาจาวาเบื้องต้น Basic Java Programming 3(2-2-5)
คำสั่งควบคุมการ ทำงาน การเขียนโปรแกรมโดยปกติ มีทั้งให้ทำงาน เป็นลำดับ ที่ละคำสั่ง บางครั้งมีการให้เปลี่ยน ลำดับในการทำคำสั่ง เพื่อให้การเขียน โปรแกรมมีประสิทธิภาพสูงสุด.
ความสัมพันธ์ระหว่างคลาส (Class Relationship)
The ServerSocket Class ใช้ในการจัดทำเครื่องที่เป็นการบริการ ใช้ในการจัดทำเครื่องที่เป็นการบริการ โดยจะมี ช่วงชีวิตดังนี้ โดยจะมี ช่วงชีวิตดังนี้
Object Oriented Programming Handling Exceptions
Method of Class อ.สุพจน์ สิงหัษฐิต
Object-Oriented Programming
บทที่ 3 Class and Object (2).
หลักการเขียนโปรแกรม ( )
บทที่ 2 การแสดงผลและรับข้อมูล
บทที่ 4 คำสั่งควบคุมแบบมีทางเลือก
ตัวแปร Array แบบ 1 มิติ การเขียนโปรแกรมแบบวนซ้ำ
Java Programming Java Structure and Datatype,Variable
สายอักขระ เขียนโปรแกรม Java เบื้องต้น.
การแสดงผลและการรับข้อมูล (Data Output and Input)
Java Network Programming 1
chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
Inheritance และ Encapsulation.  การสร้างหรือพัฒนาคลาสใหม่จากคลาสเดิมที่ มีอยู่แล้ว  คลาสใหม่จะนำแอตทริบิวต์และเมธอดของ คลาสเดิมมาใช้  เป็นการถ่ายทอดคุณสมบัติจากคลาสหนึ่งสู่อีก.
เครื่องมือที่ใช้ JUnit4.8.1 on Eclipse SDK3.5.2 ขึ้นไป
Variable, Data type, Expression, Operators Data input, Data output
บทที่ 6 ตัวแปรชุดและ สตริง รายวิชา ง การเขียนโปรแกรมเชิง วัตถุ Reading: ใบความรู้ บทที่ 6.
เริ่มต้นเขียนโปรแกรมภาษาจา วา (Introduction to JAVA Programming)
การเขียนโปรแกรมบนเว็บ (Web Programming) บทที่ 2: ทบทวนการเขียน ภาษา Java ใช้ร่วมกับ Html และการรับข้อมูลจาก Form.
Handling Exceptions & database
Chapter 5 การจัดการข้อผิดพลาด (Exception Handling)
Creating And Using Exceptions
ใบสำเนางานนำเสนอ:

การจัดการกับความผิดปกติ เขียนโปรแกรม Java เบื้องต้น

หัวข้อ ความผิดพลาด ความผิดปกติ การจัดการกับความผิดปกติ การแจ้งว่าเกิดความผิดปกติ

ความผิดพลาด

ความผิดพลาด Syntax Error Logical Error เขียนขึ้นผิดจากข้อกำหนดในภาษานั้น สามารถตรวจพบได้ง่าย ตั้งแต่ตอนคอมไพล์โปรแกรม Logical Error เกิดจากความเข้าใจผิดของตัวผู้เขียนโปรแกรมเอง ความผิดพลาดลักษณะนี้จะตรวจพบได้ยาก เนื่องจากตัวภาษาจะไม่แจ้งความผิดพลาดนั้นออกมา

Syntax Error public class SyntaxError { public static void main(String[] args) { int i; System.out.println(i); }

คอมไพล์ไม่ผ่าน

Logical Error public class LogicalError { public static void main(String[] args) { int i = 2000000000; System.out.println(i*2); } -294967296

ความผิดปกติ

ปัจจัยที่ไม่สามารถควบคุมได้ หน่วยความจำที่มีจำกัด อุปกรณ์การรับและส่งข้อมูลที่อาจขัดข้อง การกรอกข้อมูลที่ผิดพลาด

ตัวอย่างโปรแกรมที่เกิดความผิดปกติ public class ExceptionError { public static void main(String[] args) { int[] array = new int[3]; System.out.println(array[3]); }

ตัวอย่างโปรแกรมที่อาจจะเกิดความผิดปกติ public class ExceptionError { public static void main(String[] args) { String name = args[0]; System.out.println("Hello " + name); }

ความผิดปกติขณะทำงาน

การจัดการความผิดปกติในภาษา C ตรวจสอบค่าที่ส่งคืน FILE *fp; fp = fopen(“mypic.jpg”, “r”); if (fp == NULL) { printf(“Cannot Open Image\n”); exit(0); }

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

การจัดการความผิดปกติในภาษา Visual Basic มีส่วนที่ใช้จัดการความผิดปกติ On Error GoTo LoadPicError MyImage.Picture = LoadPicture(“mypic.jpg”) Exit Sub LoadPicError: MsgBox(Err.Description)

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

การจัดการความผิดปกติในภาษา Java รูปแบบ try { ประโยคทำงานที่อาจเกิดความผิดปกติ; } catch (วัตถุException) { ประโยคที่ใช้จัดการความผิดปกติ; try catch

ไม่จัดการความผิดปกติ import java.util.Scanner; public class NoTryCatch { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.next(); int i = Integer.parseInt(str); System.out.println(i); }

ผลการทำงาน เมื่อป้อนค่า 10 เมื่อป้อนค่า 10.5 10 Exception in thread "main" java.lang.NumberFormatException: For input string: "10.5" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Integer.parseInt(Integer.java:456) at java.lang.Integer.parseInt(Integer.java:497) at NoTryCatch.main(NoTryCatch.java:8)

จัดการความผิดปกติด้วย try-catch Scanner sc = new Scanner(System.in); String str = sc.next(); int i = 0; try { i = Integer.parseInt(str); } catch (Exception e) { System.out.println("Catch exception"); } System.out.println(i);

ผลการทำงาน เมื่อป้อนค่า 10 10 เมื่อป้อนค่า 10.5 Catch exception

การจัดการความผิดปกติตามชนิด รูปแบบ try { ประโยคทำงานที่อาจเกิดความผิดปกติ; } catch (วัตถุ Exception ชนิดที่ 1) { ประโยคที่ใช้จัดการความผิดปกติชนิดที่ 1; catch (วัตถุ Exception ชนิดที่ 2) { ประโยคที่ใช้จัดการความผิดปกติชนิดที่ 2; try catch catch

การจัดการความผิดปกติตามชนิด try { i = Integer.parseInt(str); } catch (NumberFormatException e) { System.out.println("Catch number format exception"); } catch (Exception e) { System.out.println("Catch exception"); } System.out.println(i);

ผลการทำงาน เมื่อป้อนค่า 10 เมื่อป้อนค่า 10.5 10 Catch number format exception

finally รูปแบบ try { ประโยคสำหรับจองทรัพยากร; ประโยคทำงานที่อาจเกิดความผิดปกติ; } catch (วัตถุ Exception) { ประโยคที่ใช้จัดการความผิดปกติ; finally { ประโยคสำหรับการคืนทรัพยากร; try catch finally

เหตุการณ์ปรกติ int[] array = {10,20,30}; int count = array.length; java.io.PrintWriter writer = null; try{ writer = new java.io.PrintWriter("c:\\Temp\\test.txt"); for( int i = 0; i < count; i++) writer.println(array[i]); }

เปิดไฟล์ไม่ได้ int[] array = {10,20,30}; int count = array.length; java.io.PrintWriter writer = null; try{ writer = new java.io.PrintWriter("c:\\TTTT\\test.txt"); for( int i = 0; i < count; i++) writer.println(array[i]); }

อ้างเกินขอบเขต int[] array = {10,20,30}; int count = array.length + 1; java.io.PrintWriter writer = null; try{ writer = new java.io.PrintWriter("c:\\Temp\\test.txt"); for( int i = 0; i < count; i++) writer.println(array[i]); }

โค้ดซ้ำซ้อน int[] array = {10,20,30}; int count = array.length; java.io.PrintWriter writer = null; try{ writer = new java.io.PrintWriter("c:\\Temp\\test.txt"); for( int i = 0; i < count; i++) writer.println(array[i]); if( writer == null) System.out.println("Cannot open file for write!"); else writer.close(); }

โค้ดซ้ำซ้อน catch(IndexOutOfBoundsException e) { System.out.print("Catch index out of bounds exception "); System.out.println(e); if( writer == null) System.out.println("Cannot open file for write!"); else writer.close(); } catch(IOException e) { System.out.print("Catch io exception ");

ใช้ finally เพื่อกำจัดโค้ดซ้ำซ้อน int[] array = {10,20,30}; int count = array.length; java.io.PrintWriter writer = null; try{ writer = new java.io.PrintWriter("c:\\Temp\\test.txt"); for( int i = 0; i < count; i++) writer.println(array[i]); }

ใช้ finally เพื่อกำจัดโค้ดซ้ำซ้อน catch(IndexOutOfBoundsException e) { System.out.print("Catch index out of bounds exception "); System.out.println(e); } catch(IOException e) { System.out.print("Catch io exception "); finally{ if( writer == null) { System.out.println("Cannot open file for write!"); else { writer.close();

ประเภทของความผิดปกติ

ประเภทของความผิดปกติ ไม่ต้องตรวจสอบ ต้องตรวจสอบ ต้องอยู่ใน try-catch

ความผิดปกติที่ไม่ต้องตรวจสอบ ไม่ต้องตรวจเพราะส่วนใหญ่เกิดจากความผิดพลาดในการเขียนโปรแกรม เช่น NumberFormatException IndexOutOfBoundsException NullPointerException IllegalArgumentException มี RuntimeException เป็นคลาสแม่

ความผิดปกติที่ต้องตรวจสอบ ต้องตรวจเพราะอาจจะเกิดความผิดปกติเมื่อนำโปรแกรมไปรัน ต้องอยู่ใน try-catch เสมอ เช่น IOException FileNotFoundException

การแจ้งว่าเกิดความผิดปกติ

การแจ้งว่าเกิดความผิดปกติ รูปแบบ throw วัตถุ_exception; ตัวอย่าง Exception e = new Exception("Negative Number"); if (i < 0) throw e; หรือ throw new Exception("Negative Number");

การแจ้งว่าเกิดความผิดปกติ try { i = Integer.parseInt(str); if (i < 0) { throw new Exception(); } } catch (NumberFormatException e) { System.out.println("Catch number format exception"); } catch (Exception e) { System.out.println("Catch exception");

ผลการทำงาน เมื่อป้อนค่า 10 เมื่อป้อนค่า 10.5 เมื่อป้อนค่า -10 10 Catch number format exception เมื่อป้อนค่า -10 Catch exception -10

สรุป

สรุป การจัดการความผิดปกติเป็นการแก้ไขความผิดพลาดต่าง ๆ ที่เกิดจากปัจจัยภายนอกซึ่งไม่สามารถควบคุมได้ โปรแกรมภาษา C ต้องตรวจสอบความผิดปกติเองทุกครั้ง โปรแกรมภาษา Visual Basic ถึงแม้จะสามารถแยกส่วนการจัดการความผิดปกติออกจากส่วนของโปรแกรมหลัก โปรแกรมภาษา Java มีรูปแบบการจัดการความผิดปกติด้วย try-catch-finally block

สรุป คำสั่งที่อาจเกิดความผิดปกติจะไว้ในส่วนของ try คำสั่งที่จัดการความผิดปกติจะไว้ในส่วนของ catch การดักจับความผิดปกติด้วย catch นั้น สามารถดักจับแยกตามชนิดของความผิดปกติได้ ส่วนของ finally จะถูกเรียกใช้ทุกครั้งไม่ว่าจะเกิดหรือไม่เกิดความผิดปกติ โดยปกติจะบรรจุเขียนคำสั่งที่คืนทรัพยากร คำสั่ง throws มีไว้เพื่อโยนความผิดปกติที่เกิดขึ้นไปให้กับผู้ที่เรียกใช้เมธอดนี้ ทำให้มีทางเลือกในการจัดการกับความผิดปกติมากขึ้น