การตรวจจับข้อยกเว้น (Exception Handling)

การตรวจจับข้อยกเว้น (Exception Handling)

การพัฒนาโปรแกรมที่ซับซ้อนย่อมมีโอกาสเกิดข้อผิดพลาดในระหว่างประมวลผล การเตรียมรับความผิดพลาดที่เกิดขึ้น และตอบสนองต่อข้อผิดพลาดได้อย่างถูกต้อง เป็นสิ่งที่ภาษาจาวาเตรียมเครื่องมือให้นักพัฒนาใช้จัดการด้วย Exception Class

เช่น การตรวจจับความผิดพลาดจากการประมวลผล ที่หารด้วย 0

ลำดับชั้นของ Object ถึง Sub Class ของ java.lang.ArrayIndexOutOfBoundsException

– java.lang.Object

– java.lang.Throwable

– java.lang.Exception

– java.lang.RuntimeException

– java.lang.IndexOutOfBoundsException

– java.lang.ArrayIndexOutOfBoundsException

ตัวอย่าง . การตรวจจับความผิดพลาด

try {

System.out.println(5/0);

} catch (Exception e) {

System.out.println(“error”);

}

คลาสที่ใช้ตรวจจับความผิดพลาด ที่อยู่ใน java.lang.Exception อาทิ AclNotFoundException, ActivationException, AlreadyBoundException, ApplicationException, AWTException, BackingStoreException, BadLocationException, CertificateException, ClassNotFoundException, CloneNotSupportedException, DataFormatException, DestroyFailedException, ExpandVetoException, FontFormatException, GeneralSecurityException, GSSException, IllegalAccessException, InstantiationException, InterruptedException, IntrospectionException, InvalidMidiDataException, InvalidPreferencesFormatException, InvocationTargetException, IOException, LastOwnerException, LineUnavailableException, MidiUnavailableException, MimeTypeParseException, NamingException, NoninvertibleTransformException, NoSuchFieldException, NoSuchMethodException, NotBoundException, NotOwnerException, ParseException, ParserConfigurationException, PrinterException, PrintException, PrivilegedActionException, PropertyVetoException, RefreshFailedException, RemarshalException, RuntimeException, SAXException, ServerNotActiveException, SQLException, TooManyListenersException, TransformerException, UnsupportedAudioFileException, UnsupportedCallbackException, UnsupportedFlavorException, UnsupportedLookAndFeelException, URISyntaxException, UserException, XAException

1 การประมวลผลที่ไม่ป้องกันความผิดพลาด

การประมวลผลเป็นพฤติกรรมหลักของโปรแกรมส่วนใหญ่ที่พัฒนาขึ้น โดยมีจุดมุ่งหมายอย่างใดอย่างหนึ่ง และความผิดพลาดที่ไม่มีการป้องกันมักทำให้โปรแกรมหยุดการทำงานในทันที โดยนักพัฒนาไม่ได้คาดหมายไว้

ตัวอย่าง . การพิมพ์ผลหาร 3 จำนวนที่หารด้วยตัวเองระหว่าง –1 ถึง 1 ที่ไม่ตรวจจับ

class x {

public static void main(String arg[]) {

for(int i=-1;i<=1;i++){ System.out.println(i/i); }

}

}

Exception in thread “main” java.lang.ArithmeticException: / by zero

at x.main(x.java:3)

 

2 การประมวลผลป้องกันความผิดพลาด

ความผิดพลาดระหว่างการประมวลผลเกิดขึ้นได้เสมอ เป็นหน้าที่ของนักพัฒนาที่ต้องจัดเตรียมการป้องกันความผิดพลาด ไม่ให้เกิดความเสียหาย และหยุดการทำงานกระทันหัน เป็นผลให้ขาดความต่อเนื่องต่อคำสั่งประมวลผลที่รอดำเนินการต่อไป

ตัวอย่าง . การป้องกันการคำนวณที่ผิดพลาด แบบป้องกันวงกว้าง

class x {

public static void main(String arg[]) {

try  {

for(int i=-1;i<=1;i++){ System.out.println(i/i); }

} catch (ArithmeticException e) {

System.out.println(“error”);

}

}

}

Result Sample

1

error

 

 

ตัวอย่าง . การป้องกันการคำนวณที่ผิดพลาด แบบป้องกันเฉพาะส่วน

class x {

public static void main(String arg[]) {

for(int i=-1;i<=1;i++){

try  { System.out.println(i/i); }

catch (Exception e){System.out.println(“error”);}

}

}

}

ตัวอย่าง . การป้องกันการเรียกใช้สมาชิกของอาร์เรย์ที่ไม่ถูกกำหนด

class x {

public static void main(String args[]) {

try  { System.out.println( args[0] ); }

catch (IndexOutOfBoundsException e){System.out.println(“error”);}

}

}