51
Java Exceptions By Assoc. Prof. Rangsit Sirirangsi

Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Java Exceptions

By Assoc. Prof. Rangsit Sirirangsi

Page 2: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Java’s Exceptions

เปนความผดปกตทเกดขนระหวางการประมวลผลและมผลท าใหล าดบการท างานของชดค าสงภายในโปรแกรมเปลยนไป ซงความผดปกตดงกลาวอาจกอใหเกด error ภายในโปรแกรมErrors ในจาวาสามารถแบงออกไดเปน 2 กลม ไดแก

Compile-time errors เกดขนจากการโปรแกรมทผด syntax ของโปรแกรมภาษาทใช Run-time errors เกดขนระหวางการประมวลผลโปรแกรม

Exception เปนความผดปกตทเกดขนในชวงเวลารนไทมระหวางการประมวลผลโปรแกรม

Page 3: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

What exceptions can occur?

ตวอยางของการจดการ exceptions ของการรบคาอนพตแบบตวเลขint score = in.nextInt();

ในกรณทผใชระบคาเปน “abc123”

Exception in thread "main" java.util.InputMismatchException

at java.util.Scanner.throwFor(Scanner.java:819)at java.util.Scanner.next(Scanner.java:1431)at java.util.Scanner.nextInt(Scanner.java:2040)at java.util.Scanner.nextInt(Scanner.java:2000)at Test.main(Test.java:5)

จาวาตรวจสอบพบความผดปกตและน าเสนอผาน InputMismatchException

เนองจาก String ไมสามารถแปลงใหเปน integer ไดเมอจาวาจดการความผดปกตดงกลาว บอยครงทท าใหโปรแกรมสนสดการท างานทนท (crash)

Page 4: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Java exception mechanism

Run-time system ท าหนาทแจงใหทราบวาเกด error โดยการ throwing an exception

โปรเซสเซอรจะหยดการประมวลผลค าสงปจจบนตามล าดบ และเรมประมวลผลในค าสงอน ๆ ทเปนexception handler

Page 5: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

1. เมอมความผดปกตเกดขนภายในเมธอดจาวาจะสราง Exception ออปเจค2. ผานคาออปเจคไปยง JRE (เรยกวา throw exception )3. Exception ออปเจคประกอบไปดวยชนดของ Exception และขอมลท

เกยวของกบความผดปกตทเกดขน4. JRE รบหนาทในการคนหากลไกการจดการ Exception ทเกดขน5. โดยการไปคนหาใน Call Stack Unit เพอหากลไกการจดการทเหมาะสม

(ในกรณนเรยกวา catch)6. สวนในกรณทไมพบกลไกดงกลาวโปรแกรมจะสนสดการท างานทนท

Exception Process

Page 6: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception Process

เมอมความผดปกตเกดขนใน methodD() และ throw XxxException ไปยง JRE เพอคนหากลการจดการทเหมาะสม ในรปนไดแก methodA()

Page 7: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception classes

จาวาจดการความผดปกตโดยใชคลาส Throwable ประกอบดวยคลาสสบทอดErrors เปนความผดพลาดรายแรงทเกดขนจากกลไกภายใน เชน JVMหรอ Linker และมผลท าใหโปรแกรมสนสดการท างานลงทนท จดการไมได Exceptions เปนความผดปกตไมรายแรงเกดขนภายในโปรแกรม สามารถตรวจสอบและเขยนโคดเพอจดการได ในกรณทไมมการตรวจสอบและจดการอาจกอใหเกดการสนสดการท างานแบบผดปกต

Page 8: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Object

Error

Throwable

Exception

LinkageError

VirtualMachoneError

ClassNotFoundException

CloneNotSupportedException

IOException

AWTError

AWTException

RuntimeException

ArithmeticException

NullPointerException

IndexOutOfBounds

Exception

NoSuchElement

Exception

Exceptions Hierarchy

Page 9: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

SubClass from Exception

ArithmeticException หารคาตวเลขดวย 0 หรอปญหาทเกดจากจากการค านวณทางคณตศาสตรArrayIndexOutOfBoundsException เมอคาดชนนอยกวา 0 หรอมากกวาความยาวทแทจรงของอะเรยIndexOutOfBoundsException คาดชนของอะเรยอยภยนอกขอบเขตNullPointerException Reference ไปยงออปเจคซงยงไมมการก าหนดคาNumberFormatException การแปลงคาเกดความผดพลาด โดยปกตจะมาจาก Integer.parseInt หรอ Double.parseDoubleIllegalArgumentException เรยกใชเมธอดทมจ านวนอารกวเมนตไมถกตอง

Page 10: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Out of Bounds

Java runtime ท าหนาทคนหาโคดทใชในการจดการกบความผดพลาดทเกดขน การสราง exception ออปเจคและจดการโดย runtime system จะถกเรยกวาการ throwing an exception. Java runtime ตรวจสอบขอบเขตการเรยกใชอารเรย เชน

class ArrayOutOfBounds {public static void main( String args[] ) {

int students[] = new int[5];

students[5] = 1;System.out.println( " The End" );

}

}

Output

java.lang.ArrayIndexOutOfBoundsException: 10

at ArrayOutofBounds.main(All.java:8)

Page 11: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Types of Exceptions

Exception ประกอบไปดวยคลาสสบทอด 2 แบบ ไดแกunchecked สบทอดมาจากคลาส RuntimeExceptionchecked สบทอดมาจากคลาส Exception ยกเวนคลาสทสบทอดมาจากคลาส RuntimeException

Page 12: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Unchecked exceptions

unchecked เปนความผดปกตทเกดขนในชวงเวลารนไทม โดยคอมไพเลอรไมสามารถตรวจสอบพบไดในชวงเวลาคอมไพลโปรแกรม แตจะตรวจสอบพบไดในชวงเวลารนไทมจากคลาส RuntimeException ดงนนจงไมจ าเปนตองตรวจสอบและ throw Exception ภายในโปรแกรมException แบบนโปรแกรมเมอรเลอกทจะจดการ Exceptions หรอไมกได

ในกรณทไมมการจดการใด ๆ เมอ Exception ประเภทนเกดขน สวนใหญจะมผลท าใหโปรแกรมสนสดการท างานผใชสวนใหญเลอกใชการจดการ Exception โดยจาวา ซงไดแก การเรยกใช RuntimeException

Page 13: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Unchecked Exception

public class Unchecked {

public static void main(String[] args) {

int num1 = 10;

int num2 = 0;

int result = num1/num2;

System.out.println(result);

}

}

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

at Unchecked.main(Uncheck.java:9)

Page 14: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Checked Exception

checked เปนความผดปกตทเกดขนในชวงเวลาคอมไพล จาวาคอมไพเลอรตรวจสอบได หากไมจดการจะคอมไพลไมผานดงนนเมอเกดความผดปกตขนในรปของ checked exception (เชนIOException ) ภายในเมธอด โปรแกรมเมอรจ าเปนตองจดการ exception ดงกลาวดวยวธการหนง ๆ เสมอ

Page 15: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Checked Exceptionclass FileNotFound {

public static void main(String[] args) throws IOException {

FileInputStream fis = new FileInputStream("B:/myfile.txt");

int k;

while(( k = fis.read() ) != -1)

{

System.out.print((char)k);

}

fis.close();

}

}

Exception in thread "main" java.io.FileNotFoundException: B:\myfile.txt (The

system cannot find the path specified)

at java.io.FileInputStream.open(Native Method)

at java.io.FileInputStream.<init>(Unknown Source)

at java.io.FileInputStream.<init>(Unknown Source)

at FileNotFound.main(FileNotFound.java:10)

Page 16: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Handling Exceptions

ถาไมมการเขยนค าสงเพอจดการ Exception โปรแกรมจะสนสดลงทนทดงนนการจดการ Exception ชวยใหโปรแกรมทราบความผดปกตและรนตอไปไดวธการในการจดการ exceptions สามารถท าไดดงน

เลอกใชการจดการ exception ทมอยแลวในจาวา (ไมจดการ)ใช throws statement เพอจดการกบ exception ภายในเมธอดทตองการใชกลไกทเรยกวา try-catch ภายในเมธอดใชวธการโยน (throws) ใหเมธอดอนจดการแทน

หากไมมวธทเหมาะสมในการจดการ exception ในต าแหนงทเกดขน การจดการความผดปกตดงกลาวอาจผานไปในระดบทสงขนถดไป

Page 17: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Throwing Exceptionsขนตอนการเรยกใช throws statement ดงตอไปน

เลอกใชชนดของ Exception ออปเจคทตองการ throwทดสอบเงอนไขตามขอก าหนดในโปรแกรมthrow Exception ออปเจคเพอแสดงถงความผดปกตทเกดขน

public void myMethod() throws Exception { if( condition)

throw new Exception(“Message to display”);}

เมอจาวาพบความผดปกตเมธอด myMethod() จะสราง Exception ทเหมาะสม และผานคาไปยง JRE ดวยค าสง throws Exceptionหมายเหต ในการประกาศเมธอดใชคยเวรด "throws" สวนทอยภายในเมธอดใชคยเวรด throw".

Page 18: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

class Rectangle {

private int length;

private int width;

public Rectangle(int length, int width) throws Exception {

if (width == 0)

throw new Exception("Width must not be 0");

this.length = length;

this.width = width;

}

public static void main( String args[] ) throws Exception {

Rectangle temp = new Rectangle(12, 0);

}

}

Throw Statement Example

Exception in thread "main" java.lang.Exception: Width must not be 0at Rectangle.<init>(Rectangle.java:8)at Rectangle.main(Rectangle.java:13)

Page 19: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Catching an Exception

Use

try,

catch

to

watch forindicate exceptionshandle

try{

code that may throw exceptions

}

catch (ExceptionType ref) {

exception handling code

}

Page 20: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Basics of the try & catch Exception

เปนการจดการความผดพลาดอกวธหนงจะสามารถท าไดโดยใชคยเวรดประเภท try, throw, catch ตามล าดบโคดสวนทอาจมผลท าใหเกด exception ถกก าหนดไวภายในสวนทเรยกวาtry block สวนทเปน catch block จะประกอบไปดวยโคดทใชในการจดการ exceptionทเกดขนภายใน try block สวนคยเวรด throw ใชส าหรบการสงกลไกควบคมไปยงสวนทเปน catch exception (thrown) สวนของ catch block อาจมไดมากกวาหนงตอ 1 try Block ทงนเพอใหสามารถใชไดกบ exceptions หลายชนด

Page 21: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

The try & catch Exception

รปแบบของ try block จะประกอบดวยคยเวรด try ตามดวยชดค าสงตงแตหนงหรอมากกวาทอยภายในเครองหมายปกกา

try{

//java statements

}//end try block

โคดทใชส าหรบจดการ Exception จะถกก าหนดไวภายใน catch blocks ซงเรมตนดวยคยเวรด catch ตามดวยชนดของ exception ตามรปแบบดงน

catch(ThrowableObjectType paramName){

//Java statements to handle the exception

} //end catch

Page 22: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Catching exceptionsExceptions จะถกจดการหรอ “caught” โดยใช try-catch statement

try {statements1

} catch ( exception parameter1 ) {statements2

} catch ( exception parameter2 ) {statements3

} catch ( exception parameter3 ) {statements4

} …

try block ประกอบไปดวยค าสงสวนทเปน

failure

จ านวนของ exception handlers (catch

clauses)

แตละ catch clause จะมพารามเตอรทเปน type Exception หรอ subclasses

Page 23: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

The catch block(s)

try block จะตองใชรวมกบอยางนอย 1 catch block (หรอ 1 finallyblock) มฉะนนคอมไพเลอรจะแจงความผดพลาดเสมอสวนทเปน try และ catch block จะตองไมมโคดอนใดแทรกอยระหวางสองสวนไดหากไมมการ thrown exception

สวนทเปนโคดส าหรบจดการ Exception จะถกขามไปการควบคมจะกลบไปสต าแหนงภายหลง catch blocks

Page 24: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

try-catch Control Flow

code before try

try block

code after try

no exceptions occur

code before try

try block catch block

exception occurs

code after try

Page 25: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Without Exception Handlingimport java.util.Scanner;

public class NoTryCatch {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

String str = sc.next();

int i = Integer.parseInt(str);

System.out.println(i);

}

}

10.5

Exception in thread "main" java.lang.NumberFormatException: For input

string: "10.5“ at

java.lang.NumberFormatException.forInputString(NumberFormatExceptio

n.java:48)

at java.lang.Integer.parseInt(Integer.java:456)

at java.lang.Integer.parseInt(Integer.java:497)

at NoTryCatch.main(NoTryCatch.java:8)

Page 26: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

With try-catch Exception Handlingimport java.util.Scanner;

public class WithTryCatch {public static void main(String[] args) {

Scanner sc = new Scanner(System.in);String str = sc.next();int i = 0;

try {i = Integer.parseInt(str);

} catch (Exception e) {System.out.println("Catch exception");

}System.out.println(i);

}}

10.5Catch exception0

Page 27: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

class ExceptionDemo {

public int convert(String s) {

int result = 0 ;try {

result = Integer.parseInt(s) ;

}

catch (NumberFormatException e) {

System.out.println("String conversion failed: " + e) ;}

return result ;

}

public static void main(String[] args) {

ExceptionDemo e1 = new ExceptionDemo() ;

e1.convert("123") ;

e1.convert("abc") ;

}

}

String conversion failed: java.lang.NumberFormatException: For

input string: "abc"

Try & catch Exception : Example

Page 28: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

class HandlerSimple{

public static void change( int[] course ) {

System.out.println( "Start Change" );course[ 10 ] = 1;System.out.println( "End Change" );

}

public static void main( String args[] ) {int students[] = new int[5];try {

System.out.println( "Start Try" );change( students );System.out.println( "After change" );

} catch (ArrayIndexOutOfBoundsException e) {

System.err.println( "OutOfBounds: " + e.getMessage());}

System.out.println( "After try " );}

} // Start Try

// Start Change

// OutOfBounds: 10

// After try

Handling exceptions

Page 29: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

No Exceptions Handlingในกรณทไมม try block

class NoHandler {

public static void change( int[] course ) { System.out.println( "Start Change" );

course[ 10 ] = 1;System.out.println( "End Change" );

}

public static void main( String args[] ) {int students[] = new int[5];System.out.println( "Start Try" );change( students );System.out.println( "After change" );

}}

Start TryStart ChangeException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10

at Nohandler.change(NoHandler.java:6)at NoHandler.main(NoHandler.java:12)

Page 30: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Methods of the Throwable class

fillInStackTrace()

getStackTrace()

printStackTrace()

setStackTrace(StackTraceElement[]

stackTrace)

getLocalizedMessage()

getMessage()toString()

StackTrace

Messages

Page 31: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

StackTrace & Messages StackTrace เปนรายการของเมธอดทถกประมวลผลตามล าดบทกอใหเกดการexception. (ในกรณจะมองเหนไดจากผลลพธในการรนของโปรแกรมเมอเกดruntime error ทไมมเมธอดส าหรบจดการรองรบ)เมธอด printStackTrace() ใชส าหรบแสดง stack trace เมอม exception หรอerror เกดขนMessages เปนกลไกทใชในการรบคาในรปของ String จาก exception ออปเจคเนองจากทก ๆ exception ออปเจคจะสบทอดมาจากคลาส Throwable ดงนนเม-ธอดเหลานจงสามารถน าไปใชไดในสวนของโคดทใชในการจดการ exception ตวอยางเชน ภายใน exception ออปเจคจะประกอบไปดวยขอมลของ Exceptionทสามารถแสดงรายละเอยดคาออกมาไดโดยใชเมธอด getMessage()

Page 32: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Multiple Exceptions class MultipleExceptions {

public static void main( String args[] ) {

int students[] = new int[5];

int classSize = 0;

try {

System.out.println( "Start Try" );

int classAverage = 10 / classSize;

System.out.println( "After class average" );

students[10] = 1;System.out.println( "After array statement" ); }

catch (ArrayIndexOutOfBoundsException e) {

System.err.println( "OutOfBounds: " + e.getMessage());

}

catch ( ArithmeticException e ) {

System.err.println( " Math Error" + e.getMessage() );

}

System.out.println( " After try " );}

}

// Start Try // Math Error/ by zero // After try

Divide by Zero

Page 33: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

The finally block

finally block เปนกลไกทยอมใหเมธอดทก าหนดโดยผใชสามารถ clean up คาทตองการโดยไมสนใจกบสงทเกดขนใน try block ในกรณทไมมการ thrown exceptions โคดภายใน catch blocks จะไมถกประมวลผล แตการประมวลผลจะเกดขนท finally block ในกรณทมการ thrown exception และโคดภายใน catch blocks จะถกประมวลผลจนเสรจสน จากนน control จะถกสงไปยง finally block เพอประมวลผลโคดในสวนของ finally block ตอไปการใช finally block จงเหมาะสมกบงานประเภทปดไฟลหรอคนคาทรพยากรกลบสระบบ

Page 34: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

try-catch-finally block

Execute try block Find catch block to execute

Execute catch block

for

exception1

Execute catch block

for

exception2

Execute catch block

for

exceptionn

…..

Execute finally block

[exception]

[no exception] …..

[exception1] [exception2] [exceptionn]

Page 35: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

The try-catch-finally statement

หากตองการประมวลผลโคดบางสวน ไมวา exception จะเกดขนหรอไม ผใชสามารถใชทางเลอกทเรยกวา finally clause โดยมรปแบบดงน:

try

{

// code

// more code

}

catch( ExceptionType e)

{

//handler for this exception

}

finally

{ .. }

finally block จะประมวลผลโดยไมสนใจวา exceptions ถก thrown หรอไมภายใน try block

Page 36: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

public class FinallyDemo {

public void aMethod(){

try{

int x = 5/0;

} catch(ArithmeticException e){

System.out.println("In catch,terminating aMethod");

return;

}

finally{

System.out.println(“ Executing finally block");

}

System.out.println( "Out of catch block");

}//end aMethod

public static void main(String[] args){

new FinallyDemo().aMethod();

}

}//end class

In catch, terminating aMethod

Executing finally block

The try-catch-finally statement

Page 37: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Execute return statement in catch block

โคดจากโปรแกรมตวอยางจะเกด ArithmeticException เนองจากมความพยายามทจะหารคา integer ดวย 0 จากนนกลไกควบคมจะถกสงผานไปยงcatch block ทก าหนดไวและแสดงขอความและประมวลผลค าสง returnทนทโดยปกตแลวการประมวลผลค าสง return จะมผลท าใหสนสดการท างานของเมธอดทนท แตในกรณนกอนทจะสนสดการท างานของเมธอด โคดภายใน finally จะถกประมวลผลกอนท control จะถกสงกลบไปยงเมธอด main ตอไปoutput : In catch, terminating aMethod Executing finally

block.

Page 38: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Final Block - Always Called

class FinalBlockExceptionNotCalled {

public static void main( String args[] ) {

int students[] = new int[5];

try {

System.out.println( "Start Try" );

students[2] = 1;

System.out.println("After array statement");

}

catch (ArrayIndexOutOfBoundsException e) {

System.err.println( "OutOfBounds: " + e.getMessage());

}

finally {

System.out.println( "In Final Block" );

}

System.out.println( " After try " );

}

}

//Start Try //After array statement //In Final Block //After try

Page 39: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception Propagation

ในกรณทไมเหมาะสมทจะจดการ exception ในต าแหนงทเกดขน การจดการความผดปกตดงกลาวอาจจดการไดในระดบทสงขนถดไปไดโดย Exceptions จะถกสงผานกลไกควบคมกลบไปยงเมธอดทเรยกใชตามล าดบ จนกวาจะถกตรวจสอบและจดการ exception นน ๆ ไดอยางเหมาะสมในระดบทสง ๆ ขนจนกวาจะถงระดบบนสดในกรณท exception ไมถกตรวจสอบและจดการในต าแหนงทเกดขนได กลไกควบคมจะถกสงคนกลบไปยงเมธอดทเรยกใชเมธอดทเกดความผดปกตขนทนทกระบวนการนจะถกเรยกวา Exception Propagation

Page 40: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception Propagationclass MathDivider {

private int no1, no2;

public MathDivider(int no1, int no2) {

this.no1 = no1;

this.no2 = no2;

}

public int checkZero() throws Exception {

if (no2 == 0)

throw new Exception("Divided by Zero");

else

return no2;

}

public int divider() throws Exception { return (no1/this.checkZero());

}

}

class RunDivider {

public static void main(String[] args) throws Exception {

MathDivider md = new MathDivider(5, 0);

System.out.println(" "+ md.divider());

}

} Exception in thread "main" java.lang.Exception: Divided by Zeroat MathDivider.checkZero(MathDivider.java:12)at MathDivider.divider(MathDivider.java:17)at RunDivider.main(MathDivider.java:24)

ArithmeticException Occurred

Page 41: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Divided by Zero : Exceptions class Arithmatic

{

public static void main(String [] args) {

int num[] = {4, 6, 7, 1};

int divided[] = {2, 3, 0, 8};

for (int i = 0; i < 4; ++i) {

try {

System.out.println( num[i] + " / "+divided[i] + " = " +

num[i]/divided[i]);}

catch (ArithmeticException ex) {

System.out.println( ex.getMessage()); }

}

}

}

4 / 2 = 26 / 3 = 2/ by zero1 / 8 = 0

Page 42: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception Handling Example: Divide by Zero

ตวอยางโปรแกรมผใชก าหนดคาตวเลขแบบ integers จ านวนสองคาส าหรบการ dividedตองการ catch errors จากการ divide โดยคา 0Exceptions

Objects จะถกสบทอดมาจากคลาส Exceptionหากตรวจสอบภายในคลาส Exception ใน java.lang

ไมมโคดทเหมาะสมส าหรบการจดการ divide by zeroสวนทใกลเคยงทสดคอ ArithmeticExceptionสรางคลาสทสบทอดมาจากคลาส exception ขนใหม

Page 43: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

User-defined Throwable Classes

ผใชสามารถสรางคลาสสบทอดจาก Exception เปนของตวเองไดโดยจาวาจะยอมใหก าหนดเงอนไขทตรงกบ Exceptions ทผใชตองการตรวจสอบ

class Exception extends Throwable {

public Exception() {

super();

}

public Exception(String s){

super(s);

}

}

Object

Error

Throwable

Exception

Linkage ClassNotFound Runtime

IllegalThreadState

IllegalArgument IndexOutOfBound

NumberFormat

User-Defined?

Page 44: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

คลาส Exception สวนใหญจะประกอบไปดวย 2 constructors ดงนแบบแรกจะไมม arguments (default) แบบทสองจะรบคา exception message

ทงสองเมธอดเรยกใช constructor ไปยง SuperClass

public class DivideByZeroException extends ArithmeticException

{

public DivideByZeroException()

public DivideByZeroException( String message )

}

Create your own exceptions

Page 45: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Exception Handling Example: Divide by Zero

public class DivideByZeroException extends

ArithmeticException {

public DivideByZeroException() {

super( "Attempted to divide by zero" );

}

public DivideByZeroException( String message ) {

super( message );

}

}

ขนตอนถดไปจะเปนการ throw Exception ในสวนของ try blockสวนโคดส าหรบจดการ Error จะอยภายใน catch blockหากไมมการ thrown สวนของ catch blocks จะถกขามไป

Page 46: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

class DivideByZeroException extends ArithmeticException {

public DivideByZeroException() {

super("Attempted to divide by zero");

}

}

class ExceptionTest {

public static void main(String [] args) {

int num[] = {4, 6, 7, 1};

int divided[] = {2, 3, 0, 8};

for (int i = 0; i < 4; ++i) {

try {

if ((divided[i]) == 0)

throw new DivideByZeroException();

System.out.println( num[i] + " / "+divided[i] +

" = " + num[i]/divided[i]);

}

catch (DivideByZeroException ex) {

System.out.println(ex.getMessage()); }

} }

} 4 / 2 = 26 / 3 = 2Attempted to divide by zero1 / 8 = 0

Your own exceptions with throw stmt

Page 47: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Class Accountpublic class Account {

private double balance;

public void deposit (double amount) {

balance = balance + amount;

}

public void withdraw (double amount) {

balance = balance - amount;

}

public double getBalance() {

return balance;

}

}

deposit() อาจเกดปญหาในกรณท amount เปนคาตดลบwithdraw() อาจเกดปญหาในกรณท amount > balance

Page 48: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Create your own exceptions

สรางคลาสทสบทอดมาจากคลาส Exception ประกอบไปดวย 2 constructors สวน s จะเปนรายละเอยดของ error message

public class NegativeInputException extends Exception {

public NegativeInputException(String s) {super(s);

}}

public class NotEnoughMoneyException extends Exception {public NotEnoughMoneyException(String s) {

super(s);}

}

Page 49: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

class BalanceException {

private int balance;

public BalanceException(int balance) {

this.balance = balance;

}

public int getBalance() {

return balance;

}

public void withdraw(int amt) throws NegativeInputException,

NotEnoughMoneyException {

if(amt < 0) {

throw new NegativeInputException("Withdraw amount cannot be negative");

} else if (amt > balance) {

throw new NotEnoughMoneyException("Amount less than minimum Balance");

} else {

balance-=amt;

}

}

public void deposit(int amt) throws NegativeInputException {

if(amt < 0) {

throw new NegativeInputException("Deposit amount cannot be negative");

}

else {

balance+=amt;

}

}

}

Page 50: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Test.javapublic class Test {

public static void main(String[] args) {

Balance b = new Balance(100);

try {

b.withdraw(200);

} catch (NegativeInputException ex) {

ex.printStackTrace();

} catch (NotEnoughMoneyException ex) {

ex.printStackTrace();

}

try {

b.deposit(-100);

} catch (NegativeInputException ex) {

ex.printStackTrace();

}

}

}

Page 51: Java Exceptions - Maejo Universityitsci.mju.ac.th/sayan/it214/slides/Java2_02.pdfWhat exceptions can occur? ตว อยา งของการจ ดการexceptions ของการร

Test.java

Output

NotEnoughMoneyException

at BalanceException.withdraw(BalanceException.java:15)

at Run.main(BalanceException.java:53)

NegativeInputException: Deposit amount cannot be negative

at BalanceException.deposit(BalanceException.java:23)

at Run.main(BalanceException.java:59)