100 likes | 206 Views
การโปรแกรมเชิงวัตถุด้วยภาษา JAVA. Exception. มหาวิทยาลัยเนชั่น http://www. nation. ac.th. บุรินทร์ รุจจนพันธุ์ . ปรับปรุง 6 มิถุนายน 255 6. ความหมาย. Exception เป็นชื่อคลาสอยู่ใน package java.lang คลาสนี้ใช้ตรวจจับข้อผิดพลาดของโปรแกรม
E N D
การโปรแกรมเชิงวัตถุด้วยภาษา JAVA Exception มหาวิทยาลัยเนชั่น http://www.nation.ac.th บุรินทร์ รุจจนพันธุ์ . ปรับปรุง 6 มิถุนายน 2556
ความหมาย • Exception เป็นชื่อคลาสอยู่ใน package java.lang • คลาสนี้ใช้ตรวจจับข้อผิดพลาดของโปรแกรม • และดำเนินการกับเหตุการณ์ที่มักไม่ปกติ ในแบบข้อยกเว้น • เช่น • - ผลการดำเนินการทางคณิตศาสตร์ที่ปล่อยให้มีการหารด้วย 0 • - การเรียกใช้อาร์เรย์ ที่กำหนด index นอกขอบเขตที่อาร์เรย์เก็บไว้ • มีคำสำคัญ 4 คำ คือ try, catch, throw, finally
แบบไม่ตรวจจับ class x { public static void main(String[] args) { System.out.println(1/0); } } Exception in thread "main" java.lang.ArithmeticException: / by zero at x.main(x.java:3)
ตรวจจับแบบคลุมหมด class x { public static void main(String[] args) { try { System.out.println(1/0); } catch (Exception e) { System.out.println(e); } // java.lang.ArithmeticException: / by zero } } http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/Exception.html
ตรวจจับเฉพาะ ArithmeticException class x { public static void main(String[] args) { try { System.out.println(1/0); } catch (ArithmeticException e) { System.out.println(e); } // java.lang.ArithmeticException: / by zero } } http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ArithmeticException.html
การใช้ throw • class x { • public static void main(String[] args) { • try { • int i = 0; • if(i == 0){throw new Exception("nothing");} • // unreachable "hello" • System.out.println("hello"); • System.out.println(1/i); • }catch(Exception e) {System.out.println(e);} • } • // java.lang.Exception: nothing • }
การใช้ finally class x { public static void main(String[] args) { try { System.out.println(1); System.out.println(1/0); System.out.println(2); } catch (Exception e) { System.out.println(e); } finally { System.out.println("printed both catch and not catch"); } }} // 1 // java.lang.ArithmeticException: / by zero // printed both catch and not catch
การใช้ throws • class x { • public static void main(String[] args) { • y z = new y(); • try { z.yy(); } • catch (Exception e) {System.out.print(e);} • }} • class y { • public static void yy() throws Exception { • System.out.println(1); • System.out.println(1/0); • System.out.println(2); • }} • // 1 • // java.lang.ArithmeticException: / by zero
3 Catch with order of level class x { public static void main(String[] args) { try { System.out.println(1/0); } catch (ArithmeticException e) {System.out.print(e);} catch (ArrayIndexOutOfBoundsException e) {System.out.print(e);} catch (IndexOutOfBoundsException e) { System.out.print(e); } catch (RuntimeException e) { System.out.print(e); } catch (Exception e) { System.out.print(e); } }} บรรทัดสีน้ำเงิน ไม่ขึ้นต่อกัน แต่อยู่ภายใต้ Java.lang.Exception บรรทัดสีเขียว ขึ้นต่อกัน เพราะ IndexOutOfBoundsException อยู่ใน RuntimeException แล้วถ้าจับ RuntimeException ก็จะจับ IndexOutOfBoundsException ไปด้วย จับตามลำดับ ถ้ามี Exception ต้องไปอยู่รายการสุดท้ายของการจับ จับซ้ำไม่ได้ จับได้รอบเดียวแต่ละการจับ
ระดับการตรวจจับของ Exception สายหนึ่ง http://docs.oracle.com/javase/1.4.2/docs/api/java/lang/ArrayIndexOutOfBoundsException.html