SlideShare a Scribd company logo
บทท 9
         การจดการกบขอผดพลาด
          (Exception Handling)

           ผศ.ธนศา เครอไวศยวรรณ
           คณะเทคโนโลย(สารสนเทศ
สถาบ,นเทคโนโลย(พระจอมเกล1าเจ1าค2ณทหารลาดกระบ,ง
ว,ตถ2ประสงค8
 แนะน:าข1อผดพลาดท(<อาจเกดข=>นได1ในภาษาจาวา

 แนะน:าคลาสท(เก(<ยวข1องก,บการจ,ดการก,บข1อผดพลาดท(ก:าหนดไว1ใน Java
              <                                   <
  API
 อธบายค:าส,<งท(ใช1ในการจ,ดการก,บข1อผดพลาดคอ ค:าส,ง try,catch และ
                <                                 <
  finally
 อธบายกฎการจ,ดการก,บข1อผดพลาด

 แนะน:าวธ(การสร1างคลาสประเภทข1อผดพลาดข=>นมาใหมI
ขอผดพลาด
 โปรแกรมภาษาจาวาแบงขอผดพลาดทอาจเกดขนขณะรนโปรแกรมเป"น สอง
  ประเภทคอ
   •   Error เป"นขอผดพลาดทไมสามารถแกไขและจดการได เชน
        VirtualMachineError,OutOfMemoryError
   •   Exception เป"นขอผดพลาดทสามารถแกไขหร(อจดการได เชน
         ArrayIndexOutOfBoundsException,FileNotFoundException

 ขอผดพลาดในภาษาจาวาจะก*าหนดเป"นออปเจJคของคลาสตางๆ โดยมคลาส
  Throwable เป"นคลาสราก
คลาสทเกยวของกบขอผดพลาด
คลาสประเภท Exception
 Exception เป"นขอผดพลาดทเกดในขณะรนโปรแกรมภาษาจาวา

 Exception แบงออกเป"นสองประเภท ค(อ
     •   RuntimeException
     •   IOException
   RuntimeException เป"นขอผดพลาดทอาจหลกเลยงไดหากมการเขยน
    โปรแกรมทถ/กตอง
   IOException เป"นขอผดพลาดทภาษาจาวาก*าหนดใหตองมการจดการ
    หากมการเรยกใชเมธอดทอาจเกดขอผดพลาดประเภทนได
คลาสประเภท Exception ท(ส:าค,ญและพบบIอย
                             <
   ArithmeticException
   ArrayIndexOutOfBoundsException
   EOFException
   FileNotFoundException
   InterruptedException
   IOException
   NullPointerException
   NumberFormatException
ตวอยางโปรแกรมทอาจเกดขอผดพลาด
public class ExceptionDemo {
    public static void main(String args[]) {
           System.out.println(args[2]);
           System.out.println("Hello");
    }
}
ค*าสง try..catch
 ภาษาจาวาม(ค(ยเวร8ด try ท(<เปLนค:าส,งท(<ใช1ในการจ,ดการก,บเมธอดหรอค:าส,<ง
               8                     <
  ท(อาจเกดข1อผดพลาดซ=<งจะสIงออปเจJคประเภท Exception ในขณะร,น
    <
  โปรแกรม
 รNปแบบ
             try {
                    [statements]
             }
 โปรแกรมภาษาจาวาจะส,<งงานช2ดค:าส,งท(<อยNในบลJอกท(ละค:าส,<ง และหากเกด
                                  <      I
  ข1อผดพลาดข=นในค:าส,งประเภทใดกJจะม(การสIงออปเจJคของข1อผดพลาด
             >         <
  ประเภท Exception น,นข=>นมา
                     >
ค*าสง try..catch
 ในกรณ(ท(<ต1องการจ,ดการก,บข1อผดพลาดท(<เกดข=>น โปรแกรมจะต1องม(ช2ดค:า
  ส,งอยNIในบลJอกของค(ยเวร8ด catch ท(<จะระบ2ชนดของออปเจJคในคลาส
    <                   8
  ประเภท Exception ท(ต1องการจ,ดการ
                      <
 รNปแบบ

            catch(ExceptionType argumentName){
                   [statements]
            }
ตวอยางโปรแกรมทมการจดการกบขอผดพลาด
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");
              }
    }
}
การจ,ดการก,บข1อผดพลาดหลายๆประเภท
 โปรแกรมภาษาจาวาสามารถจะม(ช2ดค:าส,งของบลJอก catch ได1มากกวIา
                                   <
  หน=งช2ดส:าหร,บในแตIละบลJอกค:าส,<ง try
     <
 ชนดของออปเจJคประเภท Exception ท(อยNในช2ดค:าส,<งของบลJอก catch
                                  < I                              จะ
  ต1องเร(ยงตามล:าด,บการสบทอด
 ในกรณ(ท(<ม(ขอผดพลาดเกดข=>น ภาษาจาวาจะพจารณาวIาเปLนข1อผดพลาด
              1
  ชนดใด ซ=<งการท(<จะจ,ดการก,บออปเจJคประเภท Exception น,นจะพจารณา
                                                       >
  จากคลาสท(<ม(การสบทอดตามล:าด,บช,>น
ตวอยางโปรแกรม
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");
           }
    }
}
ตวอยางโปรแกรมทไมถ/กตอง
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");
              }
    }
}
บล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();
ตวอยางโปรแกรม
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");
           }
    }
}
ตวอยางโปรแกรม
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;
          }
   }
การจ,ดการก,บเมธอดท(สงออปเจJคประเภท Exception
                   < I
 เราสามารถจะจดการก,บออปเจ2คของ Exception โดยใชคลาสทเป"น
  superclass ของ Exception นนได อาทเชน เราสามารถจดการกบ
  FileNotFoundException โดยใช IOException หร(อ Exception
  แทนได
 การจดการก,บ Exception มสองแบบ ค(อ
   •   ใชค*าสง try/catch
   •   ใชค*าสง throws ในการประกาศเมธอดท(จะม(การเร(ยกใช1เมธอดใดๆท(อาจสIง
                                        <                        <
       ออปเจJคประเภท Exception
ค:าส,<ง throws
 รNปแบบการใช1ค:าส,<ง throws ม(ด,งน(>
      [modifier] return_type methodName([arguments]) throws
                                  ExceptionType[,ExceptionType2] {
             ...
      }

 ตวอยาง
      public void openfile(String s) throws
                            FileNotFoundException {
             ...
      }
ค:าส,<ง 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าวเกดข=>น
ตวอยางโปรแกรมท(<ไม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);
        }
 }
กฎของการก:าหนดเมธอดแบบ overriden
 เมธอดแบบ overriden จะไมIอน2ญาตให1ม(การจ,ดการออปเจJคประเภท
  Exception โดยใช1ค:าส,<ง throws มากชนดกวIาท(<เมธอดเดมจ,ดการอยNIได1
ตวอยางโปรแกรมท(<มเมธอดแบบ 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");
         }
 }
ตวอยางโปรแกรมท(มเมธอดแบบ 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");
          }
  }
การสรางคลาสประเภท 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);
ตวอยางคลาสประเภท Exception ท(ก:าหนดขนใหม
                             <
public class MyOwnException extends Exception {
       public MyOwnException (String s) {
              super(s);
       }
}
การเข(ยนเมธอดเพ<อส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อผด
    <             <              >
  พลาดน(>
ตวอยางคลาส 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");
         }
    }
}
ตวอยางโปรแกรมท(มการจ,ดการก,บข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);
          }
    }
}
สร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าน,>น
                  <
สร2ปเน>อหาของบท
 ค*าสง throws จะใสIไว1ตรงค*าสงประกาศเมธอด ส:าหร,บเมธอดท(<ยงไมI
                                                           ,
  ต1องการจ,ดการก,บข1อผดพลาดแตIจะให1เมธอดทเรยกใช1เมธอดน(> เป"นตว
  จดการแทน
 เราสามารถสร1างคลาสประเภท Exception ชนดใหมIขนได1 โดยจะต1อง
                                             =>
  สบทอดมาจากคลาสท(ช<อ Exception และต1องม(การเร(ยกใช1 Constructor
                  <
  ของคลาส Exception ด1วย
แบบฝVกห,ด
 ข1อท(< 1
    •   ทดลองเข(ยนโปรแกรมเพ<อจ,ดการก,บข1อผดพลาด อาทเชIน IOException
        ArrayIndexOutOfBoundsException

 ข1อท(< 2
    •   ทดลองเข(ยนโปรแกรมเพ<อสร1างคลาสของข1อผดพลาดข=>นมาใหมI โดยยกต,วอยIาง
        โปรแกรม Account

More Related Content

PDF
Java Programming: การจัดการกับเหตุการณ์กราฟิก
PDF
Java Programming: โครงสร้างควบคุม
PPT
Java Programming [9/12]: Exception Handling
PDF
Java Programming: คลาสอินพุตและเอาต์พุต
PDF
Java Programming: อะเรย์และคอลเล็กชั่น
PPT
Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)
PPT
Java Programming [12/12] : Thread
PDF
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)
Java Programming: การจัดการกับเหตุการณ์กราฟิก
Java Programming: โครงสร้างควบคุม
Java Programming [9/12]: Exception Handling
Java Programming: คลาสอินพุตและเอาต์พุต
Java Programming: อะเรย์และคอลเล็กชั่น
Error handle-OOP(รูปแบบและลักษณะการ Error ในโปรแกรม)
Java Programming [12/12] : Thread
Java Programming: การสร้างส่วนต่อประสานกราฟิกกับผู้ใช้ (Java GUI)

What's hot (20)

PPT
Java Programming [8/12] : Arrays and Collection
PDF
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
PDF
ความรู้เบื้องต้นภาษาจาวา
PDF
Java Programming: หลักการเชิงอ็อบเจกต์
PDF
Java-Answer Chapter 05-06 (For Print)
PDF
พื้นฐานภาษาจาวา
PDF
พื้นฐานภาษาจาวา
PDF
Java-Answer Chapter 05-06
PDF
PPTX
Php เงื่อนไขต่างๆ
PPT
พื้นฐานภาษาจาวา
PDF
7 2โครงสร้าง
PDF
Java-Answer Chapter 12-13 (For Print)
PPT
Java Programming [4/12] : Object Oriented Concept
PDF
Java-Chapter 01 Introduction to Java Programming
PDF
บทที่ 5 คลาส
PPT
Computer Programming 2.2
PDF
Java-Answer Chapter 01-04 (For Print)
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Java Programming [8/12] : Arrays and Collection
Java Programming: การเขียนโปรแกรมภาษาจาวาเชิงอ็อบเจกต์
ความรู้เบื้องต้นภาษาจาวา
Java Programming: หลักการเชิงอ็อบเจกต์
Java-Answer Chapter 05-06 (For Print)
พื้นฐานภาษาจาวา
พื้นฐานภาษาจาวา
Java-Answer Chapter 05-06
Php เงื่อนไขต่างๆ
พื้นฐานภาษาจาวา
7 2โครงสร้าง
Java-Answer Chapter 12-13 (For Print)
Java Programming [4/12] : Object Oriented Concept
Java-Chapter 01 Introduction to Java Programming
บทที่ 5 คลาส
Computer Programming 2.2
Java-Answer Chapter 01-04 (For Print)
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Ad

Similar to Java Programming: การจัดการกับข้อผิดพลาด (9)

PPTX
Computer Programming 2.1
PDF
ฟังก์ชั่น Switch
PDF
บทที่ 11 การดักจับข
PPT
07 methods
PPT
Java intro
PDF
Java-Chapter 08 Methods
PPTX
เมธอด
PPTX
การเขียนคำสั่งควบคุมแบบมีทางเลือก.
PDF
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Computer Programming 2.1
ฟังก์ชั่น Switch
บทที่ 11 การดักจับข
07 methods
Java intro
Java-Chapter 08 Methods
เมธอด
การเขียนคำสั่งควบคุมแบบมีทางเลือก.
คลาสและการเขียนโปรแกรมเชิงวัตถุเบื้องต้น
Ad

More from Thanachart Numnonda (20)

PDF
Thailand Digital Industry Survey Result 2021
PDF
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
PDF
Planning on Mobile Strategy
PDF
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
PDF
Software Trends Towards AEC 2015
PDF
Personal Cloud
PDF
How would cloud computing Effect to Software Industry?
PDF
Impact of cloud computing to Asian IT Industry
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
PDF
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
PDF
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
PDF
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
PDF
Cloud Computing กับการใช้งานในองค์กรต่างๆ
PDF
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
PDF
บทความ Google vs. Android
PDF
IT trends for co-creation
PDF
Technology Trends & The Impact for Software Industry
PDF
อยากอยู่ 110 ปี
PDF
Intermediate Java Programming Language (in Thai)
Thailand Digital Industry Survey Result 2021
ประวัติ (ศาสตร์) อันแสนสุขของ แถมสุข
Planning on Mobile Strategy
ข้อบังคับ สมาคมสถาปนิกเทคโนโลยีสารสนเทศประเทศไทย
Software Trends Towards AEC 2015
Personal Cloud
How would cloud computing Effect to Software Industry?
Impact of cloud computing to Asian IT Industry
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
รายชื่อผู้สมควรได้รับใบประกาศเกียรติคุณโครงการวิทยาศาสตร์สู่ความเป็นเลิศ]
พิชิตคู่แข่ง แซงหน้าด้วยไอที ยุคใหม่
ไอซีทีกับการเปลี่ยนแปลงของสังคมไทย
Cloud Computing กับการใช้งานในองค์กรต่างๆ
3G กับอนาคต ธุรกิจแอพพลิเคชันในเมืองไทย
บทความ Google vs. Android
IT trends for co-creation
Technology Trends & The Impact for Software Industry
อยากอยู่ 110 ปี
Intermediate Java Programming Language (in Thai)

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