Java Programming: การจัดการกับข้อผิดพลาด

6,722 views
6,592 views

Published on

แนะนำหลักการของการจัดการกับข้อผิดพลาดในภาษาจาวา แนะนำคลาสที่เกี่ยวข้องกับการจัดการกับข้อผิดพลาดที่กำหนดไว้ใน Java API อธิบายคำสั่งที่ใช้ในการจัดการกับข้อผิดพลาดคือคำสั่ง try, catch และ finally อธิบายกฎการจัดการกับข้อผิดพลาด และตอนท้ายของบทจะเป็นการแนะนำการสร้างคลาสประเภทข้อผิดพลาดขึ้นมาใหม่

0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,722
On SlideShare
0
From Embeds
0
Number of Embeds
208
Actions
Shares
0
Downloads
211
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Java Programming: การจัดการกับข้อผิดพลาด

  1. 1. บทท 9 การจดการกบขอผดพลาด (Exception Handling) ผศ.ธนศา เครอไวศยวรรณ คณะเทคโนโลย(สารสนเทศ สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
  2. 2. ว,ตถ2ประสงค8  แนะน:าข1อผดพลาดท(<อาจเกดข=>นได1ในภาษาจาวา  แนะน:าคลาสท(เก(<ยวข1องก,บการจ,ดการก,บข1อผดพลาดท(ก:าหนดไว1ใน Java < < API  อธบายค:าส,<งท(ใช1ในการจ,ดการก,บข1อผดพลาดคอ ค:าส,ง try,catch และ < < finally  อธบายกฎการจ,ดการก,บข1อผดพลาด  แนะน:าวธ(การสร1างคลาสประเภทข1อผดพลาดข=>นมาใหมI
  3. 3. ขอผดพลาด  โปรแกรมภาษาจาวาแบงขอผดพลาดทอาจเกดขนขณะรนโปรแกรมเป"น สอง ประเภทคอ • Error เป"นขอผดพลาดทไมสามารถแกไขและจดการได เชน VirtualMachineError,OutOfMemoryError • Exception เป"นขอผดพลาดทสามารถแกไขหร(อจดการได เชน ArrayIndexOutOfBoundsException,FileNotFoundException  ขอผดพลาดในภาษาจาวาจะก*าหนดเป"นออปเจJคของคลาสตางๆ โดยมคลาส Throwable เป"นคลาสราก
  4. 4. คลาสทเกยวของกบขอผดพลาด
  5. 5. คลาสประเภท Exception  Exception เป"นขอผดพลาดทเกดในขณะรนโปรแกรมภาษาจาวา  Exception แบงออกเป"นสองประเภท ค(อ • RuntimeException • IOException  RuntimeException เป"นขอผดพลาดทอาจหลกเลยงไดหากมการเขยน โปรแกรมทถ/กตอง  IOException เป"นขอผดพลาดทภาษาจาวาก*าหนดใหตองมการจดการ หากมการเรยกใชเมธอดทอาจเกดขอผดพลาดประเภทนได
  6. 6. คลาสประเภท Exception ท(ส:าค,ญและพบบIอย <  ArithmeticException  ArrayIndexOutOfBoundsException  EOFException  FileNotFoundException  InterruptedException  IOException  NullPointerException  NumberFormatException
  7. 7. ตวอยางโปรแกรมทอาจเกดขอผดพลาด public class ExceptionDemo { public static void main(String args[]) { System.out.println(args[2]); System.out.println("Hello"); } }
  8. 8. ค*าสง try..catch  ภาษาจาวาม(ค(ยเวร8ด try ท(<เปLนค:าส,งท(<ใช1ในการจ,ดการก,บเมธอดหรอค:าส,<ง 8 < ท(อาจเกดข1อผดพลาดซ=<งจะสIงออปเจJคประเภท Exception ในขณะร,น < โปรแกรม  รNปแบบ try { [statements] }  โปรแกรมภาษาจาวาจะส,<งงานช2ดค:าส,งท(<อยNในบลJอกท(ละค:าส,<ง และหากเกด < I ข1อผดพลาดข=นในค:าส,งประเภทใดกJจะม(การสIงออปเจJคของข1อผดพลาด > < ประเภท Exception น,นข=>นมา >
  9. 9. ค*าสง try..catch  ในกรณ(ท(<ต1องการจ,ดการก,บข1อผดพลาดท(<เกดข=>น โปรแกรมจะต1องม(ช2ดค:า ส,งอยNIในบลJอกของค(ยเวร8ด catch ท(<จะระบ2ชนดของออปเจJคในคลาส < 8 ประเภท Exception ท(ต1องการจ,ดการ <  รNปแบบ catch(ExceptionType argumentName){ [statements] }
  10. 10. ตวอยางโปรแกรมทมการจดการกบขอผดพลาด public class ExceptionHandlingDemo { public static void main(String args[]) { try { System.out.println(args[2]); } catch(ArrayIndexOutOfBoundsException ex) { System.out.println("There is no third command line argument"); } } }
  11. 11. การจ,ดการก,บข1อผดพลาดหลายๆประเภท  โปรแกรมภาษาจาวาสามารถจะม(ช2ดค:าส,งของบลJอก catch ได1มากกวIา < หน=งช2ดส:าหร,บในแตIละบลJอกค:าส,<ง try <  ชนดของออปเจJคประเภท Exception ท(อยNในช2ดค:าส,<งของบลJอก catch < I จะ ต1องเร(ยงตามล:าด,บการสบทอด  ในกรณ(ท(<ม(ขอผดพลาดเกดข=>น ภาษาจาวาจะพจารณาวIาเปLนข1อผดพลาด 1 ชนดใด ซ=<งการท(<จะจ,ดการก,บออปเจJคประเภท Exception น,นจะพจารณา > จากคลาสท(<ม(การสบทอดตามล:าด,บช,>น
  12. 12. ตวอยางโปรแกรม public class ExceptionHandlingDemoV2 { public static void main(String args[]) { try { int i = Integer.parseInt(args[0]); System.out.println(4 / i); } catch(ArithmeticException ex) { System.out.println(ex.toString()); } catch(NumberFormatException ex) { System.out.println("Invalid numeric format"); } } }
  13. 13. ตวอยางโปรแกรมทไมถ/กตอง public class ExceptionHandlingDemoV3 { public static void main(String args[]) { try { int i = Integer.parseInt(args[0]); System.out.println(4 / i); System.out.println(args[2]); } catch(RuntimeException ex) { System.out.println(ex.toString()); } catch(ArrayIndexOutOfBoundsException ex) { System.out.println("There is no third command line argument"); } } }
  14. 14. บลJอก finally  ภาษาจาวาม(ค(ยเวร8ด finally ท(<จะม(ช2ดค:าส,<งอยNIในบลJอกเพ<อระบ2ให1 8 โปรแกรมท:าช2ดค:าส,<งด,งกลIาวหล,งจากส>นส2ดการท:างานของช2ดค:าส,งใน < บลJอก try หรอ catch  ภาษาจาวาจะท*าช1ดค*าสงในบล2อก finally เสมอ แมวาจะม(ค*าสง return ในบล2อก try หร(อ catch กIอนกJตาม กรณเดยวทจะไมท*าช1ดค*าสงในบล2อก finally ค(อม(ค*าสง System.exit();
  15. 15. ตวอยางโปรแกรม public class FinallyDemo { public static void main(String args[]) { try { System.out.println(args[2]); System.out.println("Hello"); } catch(ArrayIndexOutOfBoundsException ex) { System.out.println("There is no third argument"); } finally { System.out.println("Finish running the program"); } } }
  16. 16. ตวอยางโปรแกรม public class FinallyDemoV2 { public static void main(String args[]) { FinallyDemoV2 obj = new FinallyDemoV2(); obj.myMethod(args); } public int myMethod(String args[]) { try { System.out.println(args[2]); return 0; } catch(ArrayIndexOutOfBoundsException ex) { System.out.println("There is no third argument"); } finally { System.out.println("Finish running the program"); return 1; } }
  17. 17. การจ,ดการก,บเมธอดท(สงออปเจJคประเภท Exception < I  เราสามารถจะจดการก,บออปเจ2คของ Exception โดยใชคลาสทเป"น superclass ของ Exception นนได อาทเชน เราสามารถจดการกบ FileNotFoundException โดยใช IOException หร(อ Exception แทนได  การจดการก,บ Exception มสองแบบ ค(อ • ใชค*าสง try/catch • ใชค*าสง throws ในการประกาศเมธอดท(จะม(การเร(ยกใช1เมธอดใดๆท(อาจสIง < < ออปเจJคประเภท Exception
  18. 18. ค:าส,<ง throws  รNปแบบการใช1ค:าส,<ง throws ม(ด,งน(> [modifier] return_type methodName([arguments]) throws ExceptionType[,ExceptionType2] { ... }  ตวอยาง public void openfile(String s) throws FileNotFoundException { ... }
  19. 19. ค:าส,<ง throws  เมธอดใดๆสามารถทจะจดการก,บ Exception โดยใชค*าสง throws ได มากกวาหนงประเภท  ต,วอยIาง public void openFile(String s)throws FileNotFoundException,UnknownHostException { ... }  กรณทมการใชค*าสง throws สงตอไปเร(อยๆ แลวเมธอด main() ซ=<งเร(ยก ใช1เมธอดส2ดท1ายท(<ใช1ค:าส,ง throws ไมIม(การจ,ดการก,บออปเจJคประเภท < Exception ด,งกลIาว โปรแกรมจะเกดข1อผดพลาดในข,นตอนการร,น > โปรแกรม เม<อม(ข1อผดพลาดของออปเจJคประเภท Exception ด,งกลIาวเกดข=>น
  20. 20. ตวอยางโปรแกรมท(<ไมIม(การจ,ดการก,บ Exception public class ExceptionDemo1 { public static void main(String args[]) { ExceptionDemo1 ex1 = new ExceptionDemo1(); ex1.method1(); } public void method1() throws ArithmeticException { method2(); } public void method2() throws ArithmeticException { System.out.println(2/0); } }
  21. 21. กฎของการก:าหนดเมธอดแบบ overriden  เมธอดแบบ overriden จะไมIอน2ญาตให1ม(การจ,ดการออปเจJคประเภท Exception โดยใช1ค:าส,<ง throws มากชนดกวIาท(<เมธอดเดมจ,ดการอยNIได1
  22. 22. ตวอยางโปรแกรมท(<มเมธอดแบบ overriden ท(<ถNกต1อง ( import java.io.*; public class Parent { public void myMethods() throws IOException { } } ___________________________________________________________ public class OverrideException extends Parent{ public void myMethods() throws IOException { new FileInputStream("temp.txt"); } }
  23. 23. ตวอยางโปรแกรมท(มเมธอดแบบ overriden ท(<ไมIถNกต1อง < ( import java.io.*; public class Parent { public void myMethods() throws FileNotFoundException { } } __________________________________ public class OverrideExceptionV2 extends Parent { public void myMethods() throws FileNotFoundException,IOException { new FileInputStream("temp.txt"); } }
  24. 24. การสรางคลาสประเภท Exception ขนใหม  การสร1างคลาสประเภท Exception ข=>นมาใหมI สามารถท:าได1โดยนยามคลาส ใดๆให1สบทอดมาจากคลาสท(<ช<อ Exception  โดยท,วไปคลาสท(<ช<อ Exception จะม( constructor สองรNปแบบคอ < • public Exception() • public Exception(String s)  ด,งน,นคลาสท(<สบทอดมาจากคลาสท(<ช<อ Exception ควรจะม( constructor > ท,งสองแบบ โดยรNปแบบหน=งจะม( argument ท(ม(ชนดข1อมNลเปLน String > < < และม(ค:าส,<งแรกใน constructor เปLนค:าส,<ง super(s);
  25. 25. ตวอยางคลาสประเภท Exception ท(ก:าหนดขนใหม < public class MyOwnException extends Exception { public MyOwnException (String s) { super(s); } }
  26. 26. การเข(ยนเมธอดเพ<อสIงออปเจJคประเภท Exception  เมธอดท(ต1องการสIงออปเจJคประเภท Exception < เม<อเกดข1อผดพลาดข=นใน > ค:าส,งใด จะต1องเร(ยกใช1ค:าส,<งท(ช<อ < < throw เพ<อจะสร1างออปเจJคของคลาส ประเภท Exception ข=นมา >  รNปแบบ throw new ExceptionType([arguments])  นอกจากน(>ค:าส,งประกาศเมธอดน,นจะต1องม(ค:าส,ง throws เพ<อก:าหนดให1ค:า < > < ส,งในเมธอดอ<นๆท(เร(ยกใช1เมธอดน(ต1องเข(ยนค:าส,<งในการจ,ดการก,บข1อผด < < > พลาดน(>
  27. 27. ตวอยางคลาส FileHandler import java.io.*; public class FileHandler { public static void openFile(String filename) throws MyOwnException { File f = new File(filename); if (!f.exists()) { throw new MyOwnException("File Not Found"); } } }
  28. 28. ตวอยางโปรแกรมท(มการจ,ดการก,บข1อผดพลาด < ( public class FileOpener { public static void main (String args[]) { try { FileHandler.openFile(args[0]); System.out.println("Open successful"); } catch (MyOwnException ex) { System.err.println(ex); } } }
  29. 29. สร2ปเน>อหาของบท  ข1อด(ประเภทหน=<งของภาษาจาวาคอ เราสามารถเข(ยนโปรแกรมให1ม(การ ตรวจจ,บและจ,ดการก,บข1อผดพลาดท(อาจเกดข=นได1 โดยท(<การท:างานไมIตอง < > 1 หย2ดลง  Error เป"นขอผดพลาดทไมสามารถแกไขและจดการได สIวน Exception เป"นขอผดพลาดทสามารถแกไขหร(อจดการได  ค:าส,ง try และ catch เปLนค:าส,งท(ใช1ในการตรวจจ,บและจ,ดการก,บข1อผด < < < พลาดท(อาจเกดข=นได1 โดยบลJอกค:าส,<ง catch สามารถม(ได1มากกวIาหน=ง < > < บลJอกส:าหร,บในแตIละบลJอกค:าส,<ง try  ค:าส,ง finally เปLนค:าส,<งท(อยNIตอจากค:าส,<ง try/catch ถNกเร(ยกใช1เสมอ < < I ยกเว1นเจอค:าส,ง System.exit(0); กIอนเทIาน,>น <
  30. 30. สร2ปเน>อหาของบท  ค*าสง throws จะใสIไว1ตรงค*าสงประกาศเมธอด ส:าหร,บเมธอดท(<ยงไมI , ต1องการจ,ดการก,บข1อผดพลาดแตIจะให1เมธอดทเรยกใช1เมธอดน(> เป"นตว จดการแทน  เราสามารถสร1างคลาสประเภท Exception ชนดใหมIขนได1 โดยจะต1อง => สบทอดมาจากคลาสท(ช<อ Exception และต1องม(การเร(ยกใช1 Constructor < ของคลาส Exception ด1วย
  31. 31. แบบฝVกห,ด  ข1อท(< 1 • ทดลองเข(ยนโปรแกรมเพ<อจ,ดการก,บข1อผดพลาด อาทเชIน IOException ArrayIndexOutOfBoundsException  ข1อท(< 2 • ทดลองเข(ยนโปรแกรมเพ<อสร1างคลาสของข1อผดพลาดข=>นมาใหมI โดยยกต,วอยIาง โปรแกรม Account

×