Object-Oriented Programming with Java Burapha University, 2001 Java Exceptions Week #9 Jarungjit Parnjai
Object-Oriented Programming with Java Burapha University, 2001 Lecture Outline Defining Exceptions Difference between Error and Exception “try”, “catch” and “finally” statement Exception categories Identify Common Exceptions Programming with one’s own exceptions Using printStackTrace
Object-Oriented Programming with Java Burapha University, 2001 Errors Compile-time Errors เกิดขึ้นระหว่าง compile ตรวจสอบได้ ด้วย Compiler เช่น ผิดหลักไวยากรณ์ Run-time Error เกิดขึ้นระหว่างประมวลผล (run) เช่น Divide by zero, การอ้างอิง array ที่ “out of bounds”, อ้างอิง “null pointer” จะรู้ได้อย่างไรว่าเกิด Run-time Errors?
Object-Oriented Programming with Java Burapha University, 2001 Handling Run-time Errors เมื่อเกิด Run-time Error เราอาจ หยุดการประมวลผลส่วน Source code ปัจจุบัน jump ไปยังส่วนของ Source code ที่ เป็น Error Handling Routine จัดการ Errors ทำงานต่อ หรือ หยุดการทำงาน เมื่อเกิด Run-time Error ต้อง Interrupt การควบคุมการทำงานปกติ
Object-Oriented Programming with Java Burapha University, 2001 Exceptions Exception กำหนด “mild” Error Condition Exceptions เกิดขึ้นเมื่อ ไม่มีไฟล์ที่ต้องการเปิด การเชื่อมต่อ Network สะดุด Operands ที่เรียกใช้อยู่นอกขอบเขตที่ กำหนด ไม่มีไฟล์คลาสที่ต้องการ load … คลาส Error กำหนด “Serious” Error Condition
Object-Oriented Programming with Java Burapha University, 2001 Exception Example public class HelloWorld { public static void main(String args[]) { int i=0; String greeting[] = { "Hello world!", "No, I mean it!", "HELLO WORLD!!!” }; while (i<4) { System.out.println(greeting[i]); i++; } System.out.println("End of program."); } > java HelloWorld Hello world! No, I mean it! HELLO WORLD!!! java.lang.ArrayIndexOutOfBoundsException: 3 at HelloWorld.main(HelloWorld.java:10) >
Object-Oriented Programming with Java Burapha University, 2001 Handling Exception in Java ใช้ในการตรวจจับ Error ก่อนที่จะ เกิดขึ้น ทำได้ 2 วิธี การใช้ประโยค try-catch-finally กำหนดส่วนของ source code ที่ต้องการ ให้จัดการ Exceptions การใช้ประโยค throws ในการโยน (throw) การ Exceptions ไปให้กับ method ที่เป็นคนเรียกใช้งานให้ทำการ จัดการ Exceptions
Object-Oriented Programming with Java Burapha University, 2001 “try” and “catch” statement try { // code that might throw a particular exception … } catch (ExceptionType otherException) { // code to execute if a general is thrown … } Exception ถูกตรวจจับได้โดยการระบุ catch( ) block อาจมีได้หลาย catch( ) block ถ้าไม่มีการ thrown Exception การ ทำงานในส่วนของ catch block จะถูกข้าม ไป ไม่ทำงาน
Object-Oriented Programming with Java Burapha University, 2001 Exception Example public class HelloWorld { public static void main(String args[]) { int i=0; String greeting[] = { "Hello world!", "No, I mean it!", "HELLO WORLD!!!” }; try { while (i<4) { System.out.println(greeting[i]); i++; } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Index Out Of Bound!!!"); } System.out.println("End of program."); }
Object-Oriented Programming with Java Burapha University, 2001 Output of Exception Example > java HelloWorld Hello world! No, I mean it! HELLO WORLD!!! Index Out Of Bound!!! End of program. >
Object-Oriented Programming with Java Burapha University, 2001 “finally” statement try { // code that might throw a particular exception … } catch (ExceptionType otherException) { // code to execute if a general is thrown … } finally { // always execute this following code … } ส่วนของ Code ใน finally จะถูก ประมวลผลเสมอ ไม่ว่าจะเกิด Exception ในส่วนของ try-catch หรือไม่ก็ตาม
Object-Oriented Programming with Java Burapha University, 2001 Exception Example : try { while (i<4) { System.out.println(greeting[i]); i++; } } catch (ArrayIndexOutOfBoundsException e) { System.out.println("Index Out Of Bound!!!"); System.out.println("Re-setting Index value"); i=0; } finally { System.out.println("This is always printed!."); } :
Object-Oriented Programming with Java Burapha University, 2001 Output of Exception Example > java HelloWorld Hello world! No, I mean it! HELLO WORLD!!! Index Out Of Bound!!! Re-setting Index value This is always printed!. >
Object-Oriented Programming with Java Burapha University, 2001 Another Exception Example : try { startFaucet(); waterLawn(); } catch (BrokenPipeException e) { logProblem(); } finally { stopFaucet() } :
Object-Oriented Programming with Java Burapha University, 2001 Exception Categories Throwable Error Exception Virtual Machine Error Virtual Machine Error AWTError RuntimeException IOException FileNotFoundException EOFException ArrayIndexedOutofBound ArithemeticException NullPointerException StackOverFlowErrpr OutOfMemoryErrpr : : :
Object-Oriented Programming with Java Burapha University, 2001 Common Exceptions ArithmeticException NullPointerException NegativeArrayException ArrayIndexOutOfBoundsExcept ion SecurityException
Object-Oriented Programming with Java Burapha University, 2001 Call Stack Mechanism กรณี current block ที่ Exception ไม่จัดการ try-catch block นั้น Exceptions จะถูกโยน (throw) ต่อไปยังเมทธอดที่เรียกใช้งานส่วนของ try-catch block ได้ กรณี Exception จะถูกโยน (throw) ไปให้เมทธอด main() และ เมทธอด main() ไม่มีการจัดการ try-catch block โปรแกรมจะสิ้นสุดการทำงาน ทันที
Object-Oriented Programming with Java Burapha University, 2001 “throws” clause : public void methodA() throws IOException { // do something crunchching... }… : try { // code to execute methodsA(); …. } catch (IOException e) { // do sometihing … }
Object-Oriented Programming with Java Burapha University, 2001 “throws” clause example public class TestA() { public void methodA() throws RuntimeException { // do some number crunchching } public class TestB1() extends TestA { public void methodA() throws ArithmeticException { // do some numbercrunchching } public class TestB2() extends TestA { // fail to compile > why? public void methodA() throws Exception { // do some number crunchching }
Object-Oriented Programming with Java Burapha University, 2001 “throws” clause example import java.io.*; public class TestMultiA() { public void methodA() throws IOException, RuntimeException { // do some IO stuff } import java.io.*; public class TestMultiB1() extends TestMultiA { public void methodA() throws FileNotFoundException, UTFDataFormatException, ArigthmethicException { // do some IO and number crunchching stuff }
Object-Oriented Programming with Java Burapha University, 2001 “throws” clause example import java.io.*; public class TestMultiB2() extends TestMultiA { public void methodA() throws FileNotFoundException { // do some IO and number crunchching stuff }
Object-Oriented Programming with Java Burapha University, 2001 Creating your own Exceptions public class ServerTimedOutException () extends Exception { private int port; public ServerTimedOutException(String message, int port) { super(message); this.port = port; } public int getPort() { return port; } // use getMessage method to get the reason the exception was made }
Object-Oriented Programming with Java Burapha University, 2001 Example public void connectMe (String serverName) { int success; int portToConnect = 80; success = open(serverName, portToConnect); if (success == -1) { throw new ServerTimedOutException(“Could not connect”, portToConnect); } public void findServer() { try { connectMe (defaultServer); } catch (ServerTimedOutException e) { System.out.println(“Error : ” + e.getMessage() + “ connecting to port ” + e.getPort()); }
Object-Oriented Programming with Java Burapha University, 2001 Using prinStackTrace คลาส Throwable เป็น superclass ของทุก Exceptions เมทธอด printStackTrace( ) เรียก Stack สำหรับจัดการ Exception โดย เมทธอดล่าสุดที่ เกิด Exception จะอยู่บน top ของ Stack ใช้สำหรับ testing และ debuging
Object-Oriented Programming with Java Burapha University, 2001 Using prinStackTrace Example 1 public class UsingExceptions { 2 public static void main(String args[]) { 3 try { 4 method1(); 5 } catch (Exception e) { e.printStackTrace( ); } 6 } 7 public static void method1() throws Exception { 8 method2(); 9 } 10 public static void method2() throws Exception { 11 method3(); 12 } 13 public static void method3() throws Exception { 14 throw new Exception(”Exception thrown in method3") ; 15 } 16 }
Object-Oriented Programming with Java Burapha University, 2001 Output of Using printStackTrace Example > java UsingExceptions java.lang.Exception: Exception thrown in method3 at UsingExceptions.method3(UsingExceptions.java:14) at UsingExceptions.method2(UsingExceptions.java:11) at UsingExceptions.method1(UsingExceptions.java:8) at UsingExceptions.main(UsingExceptions.java:4) >
Object-Oriented Programming with Java Burapha University, 2001 Summary Defining Exceptions Difference between Error and Exception “try”, “catch” and “finally” statement Exception categories Identify Common Exceptions Programming with one’s own exceptions Using printStackTrace