Professional Documents
Culture Documents
CoreJava 7
CoreJava 7
7.3 X l ngoi l
Khi mt ngoi l xy ra, i tng tng ng vi ngoi l c to ra. i tng ny sau c truyn cho phng thc l ni m ngoi l xy ra. i tng ny cha thng tin chi tit v ngoi l. Thng tin ny c th c nhn v v c x l. Cc mi trng runtime nh IllegalAccessException, EmptyStackException v.v c th chn c cc ngoi l. on m trong chng trnh i khi c th to ra cc ngoi l. Lp throwable
27
Di y l cu trc ca m hnh x l ngoi l: try { } catch(Exception e1) { // If an exception is thrown in try, which is of type e1, then perform // necessary actions here, else go to the next catch block } catch(Exception e2) { // If an exception is thrown in, try which is of type e2, then perform // necessary actions here, else go to the next catch block } catch(Exception eN) { // If an exception is thrown in, try which is of type eN, then perform // necessary actions here, else go to the next catch block } finally { // this book is executed, whether or not the exception is throw. } // place code that is expected to throw an exception
28
Core Java
M hnh catch v throw c hai u im: Ngi lp trnh vin phi phn phi trng thi li ch vo nhng ni cn thit. Khng cn phi thc hin ti mi mc. Mt thng bo li c th c in ra khi tin hnh x l ngoi l.
Hnh 7.1 Khi Try v Catch bt gi bt c ngoi l no, ta phi ch ra kiu ngoi l l Exception. catch(Exception e) Khi ngoi l b bt gi khng bit thuc kiu no, chng ta c th s dng lp Exception bt ngoi l .
29
Khi catch() bt gi bt c cc li xy ra trong khi thi hnh phng thc doFileProcessing hay display. Nu mt li xy ra trong khi thi hnh phng thc doFileProcessing(), lc phng thc displayResults() s khng bao gi c gi. S thi hnh s tip tc thc hin khi catch. c nhiu lp x l li hn, nh l LookupException thay v mt i tng ngoi l chung (Exception e), li tht s s l mt instance ca LookupException hay mt trong s nhng lp con ca n. Li s c truyn qua khi try catch cho ti khi chng bt gp mt catch tham chiu ti n hay ton b chng trnh phi b hu b.
30
Core Java
} catch(Exception e) // of the outer try block { } Khi s dng cc try lng nhau, khi try bn trong c thi hnh u tin. Bt k ngoi l no b chn trong khi try s b bt gi trong cc khi catch theo sau. Nu khi catch thch hp khng c tm thy th cc khi catch ca cc khi try bn ngoi s c xem xt. Nu khng, Java Runtime Environment x l cc ngoi l. chng trnh 7.1 minh ha cch s dng cc khi try v catch. Chng trnh 7.1 class TryClass { public static void main(String args[]) { int demo=0; try { System.out.println(20/demo); } catch(ArithmeticException a) { System.out.println(Cannot Divide by zero); } } } Kt xut ca chng trnh:
Hnh 7.2 ArithmeticException Trong chng trnh ny, mt s c chia cho 0. y khng l ton t s hc hp l. Do mt ngoi l b chn v c bt gi trong khi catch. Khi ngi lp trnh vin nhn bit c loi ngoi l no c th xy ra, anh ta hay c ta vit mt cu lnh trong khi catch. y, a c s dng nh mt i tng ca Arithmaticexception in cc chi
31
tit v cc ton t ngoi l m h thng cung cp. Nu bn thay th lnh System.out.println ca khi catch bng lnh System.out.println(a.getMessage()) th kt xut ca chng trnh nh sau:
Hnh 7.3 Cu thng bo li Khi cc khi try c s dng m khng c cc khi catch no, chng trnh s bin dch m khng gp s c no nhng s b ngt khi thc thi. Bi v ngoi l xy ra khi thc thi chng trnh.
doSomethingThatMightThrowAnException();
} finally { cleanup(); } Phng thc cleanup() c gi nu phng thc doSomethingThatMightThrowAnException() chn mt ngoi l. Mt khc cleanup() cng c gi ngay khi khng c ngoi l no b chn v thi hnh tip tc sau khi lnh finally. Khi finally l tu , khng bt buc. Khi ny c t sau khi catch. H thng s duyt t cu lnh u tin ca khi finally sau khi gp cu lnh return hay lnh break
32
Core Java
c dng trong khi try. Khi finally bo m lc no cng c thc thi, bt chp c ngoi l xy ra hay khng. Hnh 7.4 minh ha s thi hnh ca cc khi try, catch v finally.
try block No Exception Exception occurs
finally block
catch block
finally block
Hnh 7.4 Khi lnh try, catch v finally Hnh 7.2 s dng khi finally. y, khi finally c thi hnh bt chp ArithmeticException c xy ra hay khng. Khi ny khai bo cc hot ng thu dn. Chng trnh 7.2 class FinallyDemo { String name; int no1,no2; FinallyDemo(String args[]) { try { name=new String(Aptech Limited); no1=Integer.parseInt(args[0]); no2=Integer.parseInt(args[1]); System.out.println(name); System.out.println(Division Result is + no1/no2); } catch(ArithmeticException i) { System.out.println(Cannot Divide by zero); } finally { name=null; // clean up code System.out.println(Finally executed); } } public static void main(String args[])
Chng 7: X l ngoi l (Exception Handling) 33
{ } }
new FinallyDemo(args);
Hnh 7.5 Khi Finally Trong v d ny, cc cu lnh trong khi Finally lun lun thi hnh, bt chp ngoi l c xy ra hay khng. Trong kt xut bn trn, khi finally c thi hnh mc d khng c ngoi l xy ra.
34
Core Java
on m sau minh ha cch s dng ca t kho throws x l nhiu ngoi l: public class Example { // multiple exceptions separated by a comma public void exceptionExample() throws ExException, LookupException { try { // statements } catch(ExException exmp) { } catch(LookupException lkpex) { } } } Trong v d trn, phng thc exceptionExample khai bo t kho throws. T kho ny c theo sau bi danh sch cc ngoi l m phng thc ny c th chn Trong trng hp ny l ExException v LookupException. Hm x l ngoi l cho cc phng thc ny nn khai bo cc khi catch c th x l tt c cc ngoi l m cc phng thc chn. Lp Exception thc thi giao din Throwable v cung cp cc tnh nng hu dng phn phi cc ngoi l. u im ca n l to cc lp ngoi l c nh ngha bi ngi dng. lm iu ny, mt lp con ca lp Exception c to ra. u im ca lp con l mt kiu ngoi l mi c th b bt gi c lp t cc loi Throwable khc. Chng trnh 7.3 minh ha ngoi l c nh ngha bi ngi dng ArraySizeException: Chng trnh 7.3 class ArraySizeException extends NegativeArraySizeException { ArraySizeException() // constructor { super(You have passed an illegal array size); } } class ThrowDemo { int size, array[]; ThrowDemo(int s) { size=s;
35
try { checkSize(); } catch(ArraySizeException e) { System.out.println(e); } } void checkSize() throws ArraySizeException { if (size < 0) throw new ArraySizeException(); else System.out.println(The array size is ok.); array = new int[3]; for (int i=0; i<3; i++) array[i] = i+1; } public static void main(String arg[]) { new ThrowDemo(Integer.parseInt(arg[0])); }
Lp c nh ngha bi ngi dng ArraySizeException l lp con ca lp NegativeArraySizeException. Khi mt i tng c to t lp ny, thng bo v ngoi l c in ra. Phng thc checkSize() c gi chn ngoi l ArraySizeException m c ch ra bi mnh throws. Kch thc ca mng c kim tra trong cu trc if. Nu kch thc l s m th i tng ca lp ArraySizeException c to. Phng thc call() c bao quanh trong khi try-catch, l ni m gi tr ca i tng c in ra. Phng thc call() cn c bao trong khi try, cho khi catch tng ng c th in ra gi tr. Kt xut ca chng trnh c ch ra hnh 7.6.
36
Core Java
Tm tt
Bt c khi no mt li xut hin trong khi thi hnh chng trnh, ngha l mt ngoi l xut hin. Ngoi l pht sinh vo lc thc thi chng trnh theo trnh t m. Mi ngoi l pht sinh ra phi b bt gi , nu khng ng dng s b ngt. Vic x l ngoi l cho php bn kt hp tt c tin trnh x l li trong mt ni. Lc on m ca bn s r rng hn. Java s dng cc khi try v catch x l cc ngoi l. Cc cu lnh trong khi try chn ngoi l cn khi catch x l ngoi l. Cc khi cha nhiu catch c th c s dng x l cc kiu ngoi l khc nhau theo cch khc nhau. T kho throw lit k cc ngoi l m phng thc chn. T kho throw ch ra mt ngoi l va xut hin. Khi finally khai bo cc cu lnh tr v ngun ti nguyn cho h thng v in nhng cu thng bo. !!! Check your progress & Exercise !!!
37
38
Core Java