際際滷

際際滷Share a Scribd company logo
Ch動董ng 7
X畛 L NGO畉I L畛 (Exception Handling)
Sau khi k畉t th炭c ch動董ng ny, b畉n c坦 th畛 n畉m 動畛c c叩c n畛i dung sau:
 畛nh ngh挑a m畛t ngo畉i l畛 (exception)
 Hi畛u 動畛c m畛c 鱈ch c畛a vi畛c x畛 l箪 ngo畉i l畛
 Hi畛u 動畛c c叩c ki畛u ngo畉i l畛 kh叩c nhau trong Java
 M担 t畉 m担 h狸nh x畛 l箪 ngo畉i l畛
 Hi畛u 動畛c c叩c kh畛i l畛nh ch畛a nhi畛u catch
 M担 t畉 c叩ch s畛 d畛ng c叩c kh畛i try, catch v finally
 Gi畉i th鱈ch c叩ch s畛 d畛ng c叩c t畛 kho叩 throw v throws
 T畛 t畉o ra c叩c ngo畉i l畛
7.1 Gi畛i thi畛u
Exception l m畛t l畛i 畉c bi畛t. L畛i ny xu畉t hi畛n vo l炭c th畛c thi ch動董ng tr狸nh. C叩c tr畉ng
th叩i kh担ng b狸nh th動畛ng x畉y ra trong khi thi hnh ch動董ng tr狸nh t畉o ra c叩c exception.
Nh畛ng tr畉ng th叩i ny kh担ng 動畛c bi畉t tr動畛c trong khi ta ang x但y d畛ng ch動董ng tr狸nh. N畉u
b畉n kh担ng ph但n ph畛i c叩c tr畉ng th叩i ny th狸 exception c坦 th畛 b畛 k畉t th炭c 畛t ng畛t. V鱈 d畛,
vi畛c chia cho 0 s畉 t畉o m畛t l畛i trong ch動董ng tr狸nh. Ng担n ng畛 Java cung c畉p b畛 m叩y d湛ng
畛 x畛 l箪 ngo畉i l畛 r畉t tuy畛t v畛i. Vi畛c x畛 l箪 ny lm h畉n ch畉 t畛i a tr動畛ng h畛p h畛 th畛ng b畛
ph叩 v畛 (crash) hay h畛 th畛ng b畛 ng畉t 畛t ng畛t. T鱈nh nng ny lm cho Java l m畛t ng担n
ng畛 l畉p tr狸nh m畉nh.
7.2 M畛c 鱈ch c畛a vi畛c x畛 l箪 ngo畉i l畛
M畛t ch動董ng tr狸nh n棚n c坦 c董 ch畉 x畛 l箪 ngo畉i l畛 th鱈ch h畛p. N畉u kh担ng, ch動董ng tr狸nh s畉 b畛
ng畉t khi m畛t exception x畉y ra. Trong tr動畛ng h畛p 坦, t畉t c畉 c叩c ngu畛n ti nguy棚n m h畛
th畛ng tr動畛c kia ph但n ph畛i s畉 動畛c di d畛i trong c湛ng tr畉ng th叩i. i畛u ny g但y l達ng ph鱈 ti
nguy棚n. 畛 tr叩nh tr動畛ng h畛p ny, t畉t c畉 c叩c ngu畛n ti nguy棚n m h畛 th畛ng ph但n ph畛i
n棚n 動畛c thu h畛i l畉i. Ti畉n tr狸nh ny 嘆i h畛i c董 ch畉 x畛 l箪 ngo畉i l畛 th鱈ch h畛p.
Cho v鱈 d畛, x辿t thao t叩c nh畉p xu畉t (I/O) trong m畛t t畉p tin. N畉u vi畛c chuy畛n 畛i ki畛u d畛
li畛u kh担ng th畛c hi畛n 炭ng, m畛t ngo畉i l畛 s畉 x畉y ra v ch動董ng tr狸nh b畛 h畛y m kh担ng 坦ng
l畉i t畉p tin. L炭c 坦 t畉p tin d畛 b畛 h動 h畉i v c叩c ngu畛n ti nguy棚n 動畛c c畉p ph叩t cho t畉p tin
kh担ng 動畛c thu h畛i l畉i cho h畛 th畛ng.
7.3 X畛 l箪 ngo畉i l畛
Khi m畛t ngo畉i l畛 x畉y ra, 畛i t動畛ng t動董ng 畛ng v畛i ngo畉i l畛 坦 動畛c t畉o ra. 畛i t動畛ng ny
sau 坦 動畛c truy畛n cho ph動董ng th畛c l n董i m ngo畉i l畛 x畉y ra. 畛i t動畛ng ny ch畛a th担ng
tin chi ti畉t v畛 ngo畉i l畛. Th担ng tin ny c坦 th畛 動畛c nh畉n v畛 v 動畛c x畛 l箪. C叩c m担i tr動畛ng
runtime nh動 IllegalAccessException, EmptyStackException v.v c坦 th畛 ch畉n 動畛c c叩c
ngo畉i l畛. o畉n m達 trong ch動董ng tr狸nh 担i khi c坦 th畛 t畉o ra c叩c ngo畉i l畛. L畛p throwable
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 27
動畛c Java cung c畉p l l畛p tr棚n nh畉t c畛a l畛p Exception , l畛p ny l l畛p cha c畛a c叩c ngo畉i l畛
kh叩c nhau.
7.4 M担 h狸nh x畛 l箪 ngo畉i l畛
Trong Java, m担 h狸nh x畛 l箪 ngo畉i l畛 ki畛m tra vi畛c x畛 l箪 nh畛ng hi畛u 畛ng l畛 (l畛i), 動畛c bi畉t
畉n l m担 h狸nh catch v throw. Trong m担 h狸nh ny, khi m畛t l畛i x畉y ra, m畛t ngo畉i l畛 s畉 b畛
ch畉n v 動畛c 動a vo trong m畛t kh畛i. Ng動畛i l畉p tr狸nh vi棚n n棚n x辿t c叩c tr畉ng th叩i ngo畉i l畛
畛c l畉p nhau t畛 vi畛c i畛u khi畛n th担ng th動畛ng trong ch動董ng tr狸nh. C叩c ngo畉i l畛 ph畉i 動畛c
b畉t gi畛 n畉u kh担ng ch動董ng tr狸nh s畉 b畛 ng畉t.
Ng担n ng畛 Java cung c畉p 5 t畛 kho叩 sau 畛 x畛 l箪 c叩c ngo畉i l畛:
 try
 catch
 throw
 throws
 finally
D動畛i 但y l c畉u tr炭c c畛a m担 h狸nh x畛 l箪 ngo畉i l畛:
try
{
// place code that is expected to throw an exception
}
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.
}
7.4.1 C叩c 動u i畛m c畛a m担 h狸nh catch v throw
28 Core Java
M担 h狸nh catch v throw c坦 hai 動u i畛m:
 Ng動畛i l畉p tr狸nh vi棚n ph畉i ph但n ph畛i tr畉ng th叩i l畛i ch畛 vo nh畛ng n董i c畉n thi畉t. Kh担ng
c畉n ph畉i th畛c hi畛n t畉i m畛i m畛c.
 M畛t th担ng b叩o l畛i c坦 th畛 動畛c in ra khi ti畉n hnh x畛 l箪 ngo畉i l畛.
7.4.2 C叩c kh畛i try v catch
Kh畛i try-catch 動畛c s畛 d畛ng 畛 thi hnh m担 h狸nh catch v throw c畛a vi畛c x畛 l箪 ngo畉i l畛.
Kh畛i try ch畛a m畛t b畛 c叩c l畛nh c坦 th畛 thi hnh 動畛c. C叩c ngo畉i l畛 c坦 th畛 b畛 ch畉n khi thi
hnh nh畛ng c但u l畛nh ny. Ph動董ng th畛c d湛ng 畛 ch畉n ngo畉i l畛 c坦 th畛 動畛c khai b叩o trong
kh畛i try. M畛t hay nhi畛u kh畛i catch c坦 th畛 theo sau kh畛i try. C叩c kh畛i catch ny b畉t
c叩c ngo畉i l畛 b畛 ch畉n trong kh畛i try. H達y nh狸n kh畛i try d動畛i 但y:
try
{
doFileProcessing(); // user-defined method
displayResults();
}
catch (Exception e) // exception object
{
System.err.println(Error : + e.toString());
e.printStackTrace();
}
畛 但y, e l 畛i t動畛ng c畛a l畛p Exception. Ch炭ng ta c坦 th畛 s畛 d畛ng 畛i t動畛ng ny 畛 in
c叩c chi ti畉t v畛 ngo畉i l畛. C叩c ph動董ng th畛c toString v printStackTrace 動畛c s畛 d畛ng 畛
m担 t畉 c叩c exception ph叩t sinh ra. H狸nh sau ch畛 ra k畉t xu畉t c畛a ph動董ng th畛c
printStackTrace().
H狸nh 7.1 Kh畛i Try v Catch
畛 b畉t gi畛 b畉t c畛 ngo畉i l畛 no, ta ph畉i ch畛 ra ki畛u ngo畉i l畛 l Exception.
catch(Exception e)
Khi ngo畉i l畛 b畛 b畉t gi畛 kh担ng bi畉t thu畛c ki畛u no, ch炭ng ta c坦 th畛 s畛 d畛ng l畛p Exception
畛 b畉t ngo畉i l畛 坦.
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 29
Kh畛i catch() b畉t gi畛 b畉t c畛 c叩c l畛i x畉y ra trong khi thi hnh ph動董ng th畛c
doFileProcessing hay display. N畉u m畛t l畛i x畉y ra trong khi thi hnh ph動董ng th畛c
doFileProcessing(), l炭c 坦 ph動董ng th畛c displayResults() s畉 kh担ng bao gi畛 動畛c g畛i. S畛
thi hnh s畉 ti畉p t畛c th畛c hi畛n kh畛i catch. 畛 c坦 nhi畛u l畛p x畛 l箪 l畛i h董n, nh動 l
LookupException thay v狸 m畛t 畛i t動畛ng ngo畉i l畛 chung (Exception e), l畛i th畉t s畛 s畉 l
m畛t instance c畛a LookupException hay m畛t trong s畛 nh畛ng l畛p con c畛a n坦. L畛i s畉 動畛c
truy畛n qua kh畛i try catch cho t畛i khi ch炭ng b畉t g畉p m畛t catch tham chi畉u t畛i n坦 hay
ton b畛 ch動董ng tr狸nh ph畉i b畛 hu畛 b畛.
7.5 C叩c kh畛i ch畛a nhi畛u Catch
C叩c kh畛i ch畛a nhi畛u catch x畛 l箪 c叩c ki畛u ngo畉i l畛 kh叩c nhau m畛t c叩ch 畛c l畉p. Ch炭ng
動畛c li畛t k棚 trong o畉n m達 sau:
try
{
doFileProcessing(); // user defined mothod
displayResults(); // user defined method
}
catch(LookupException e) // e  Lookupexception object
{
handleLookupException(e); // user defined handler
}
catch(Exception e)
{
System.err.println(Error: + e.printStackTrace());
}
}
Trong tr動畛ng h畛p ny, kh畛i catch 畉u ti棚n s畉 b畉t gi畛 m畛t LockupException. Kh畛i catch
th畛 hai s畉 x畛 l箪 ki畛u ngo畉i l畛 kh叩c v畛i kh畛i catch th畛 nh畉t.
M畛t ch動董ng tr狸nh c滴ng c坦 th畛 ch畛a c叩c kh畛i try l畛ng nhau. V鱈 d畛 o畉n m達 d動畛i 但y:
try
{
statement 1;
statement 2;
try
{
statement1;
statement2;
}
catch(Exception e) // of the inner try block
{
}
30 Core Java
}
catch(Exception e) // of the outer try block
{
}

Khi s畛 d畛ng c叩c try l畛ng nhau, kh畛i try b棚n trong 動畛c thi hnh 畉u ti棚n. B畉t k畛 ngo畉i
l畛 no b畛 ch畉n trong kh畛i try s畉 b畛 b畉t gi畛 trong c叩c kh畛i catch theo sau. N畉u kh畛i
catch th鱈ch h畛p kh担ng 動畛c t狸m th畉y th狸 c叩c kh畛i catch c畛a c叩c kh畛i try b棚n ngoi s畉
動畛c xem x辿t. N畉u kh担ng, Java Runtime Environment x畛 l箪 c叩c ngo畉i l畛.
ch動董ng tr狸nh 7.1 minh h畛a c叩ch s畛 d畛ng c叩c kh畛i try v catch.
Ch動董ng tr狸nh 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);
}
}
}
K畉t xu畉t c畛a ch動董ng tr狸nh:
H狸nh 7.2 ArithmeticException
Trong ch動董ng tr狸nh ny, m畛t s畛 動畛c chia cho 0. 但y kh担ng l to叩n t畛 s畛 h畛c h畛p l畛. Do
坦 m畛t ngo畉i l畛 b畛 ch畉n v 動畛c b畉t gi畛 trong kh畛i catch. Khi ng動畛i l畉p tr狸nh vi棚n nh畉n
bi畉t 動畛c lo畉i ngo畉i l畛 no c坦 th畛 x畉y ra, anh ta hay c担 ta vi畉t m畛t c但u l畛nh trong kh畛i
catch. 畛 但y, a 動畛c s畛 d畛ng nh動 m畛t 畛i t動畛ng c畛a Arithmaticexception 畛 in c叩c chi
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 31
ti畉t v畛 c叩c to叩n t畛 ngo畉i l畛 m h畛 th畛ng cung c畉p. N畉u b畉n thay th畉 l畛nh
System.out.println c畛a kh畛i catch b畉ng l畛nh System.out.println(a.getMessage())
th狸 k畉t xu畉t c畛a ch動董ng tr狸nh nh動 sau:
H狸nh 7.3 C但u th担ng b叩o l畛i
Khi c叩c kh畛i try 動畛c s畛 d畛ng m kh担ng c坦 c叩c kh畛i catch no, ch動董ng tr狸nh s畉 bi棚n
d畛ch m kh担ng g畉p s畛 c畛 no nh動ng s畉 b畛 ng畉t khi th畛c thi. B畛i v狸 ngo畉i l畛 達 x畉y ra khi
th畛c thi ch動董ng tr狸nh.
7.6 Kh畛i finally
Khi m畛t ngo畉i l畛 xu畉t hi畛n, ph動董ng th畛c ang 動畛c th畛c thi c坦 th畛 b畛 d畛ng m kh担ng
動畛c thi hnh ton v畉n. N畉u i畛u ny x畉y ra, th狸 c叩c o畉n m達 (v鱈 d畛 nh動 o畉n m達 v畛i
ch畛c nng thu h畛i ti nguy棚n c坦 c叩c l畛nh 坦ng l畉i t畉p tin khai b叩o cu畛i ph動董ng th畛c) s畉
kh担ng bao gi畛 動畛c g畛i. Java cung c畉p kh畛i finally 畛 gi畉i quy畉t vi畛c ny. Kh畛i finally
th畛c hi畛n t畉t c畉 c叩c vi畛c thu d畛n khi m畛t ngo畉i l畛 x畉y ra. Kh畛i ny c坦 th畛 動畛c s畛 d畛ng
k畉t h畛p v畛i kh畛i try. Kh畛i finally ch畛a c叩c c但u l畛nh thu h畛i ti nguy棚n v畛 cho h畛 th畛ng
hay l畛nh in ra c叩c c但u th担ng b叩o. C叩c l畛nh ny bao g畛m:
 坦ng t畉p tin.
 坦ng l畉i b畛 k畉t qu畉 (動畛c s畛 d畛ng trong ch動董ng tr狸nh c董 s畛 d畛 li畛u).
 坦ng l畉i c叩c k畉t n畛i 動畛c t畉o trong c董 s畛 d畛 li畛u.
try
{
doSomethingThatMightThrowAnException();
}
finally
{
cleanup();
}
Ph動董ng th畛c cleanup() 動畛c g畛i n畉u ph動董ng th畛c
doSomethingThatMightThrowAnException() ch畉n m畛t ngo畉i l畛. M畉t kh叩c cleanup() c滴ng
動畛c g畛i ngay khi kh担ng c坦 ngo畉i l畛 no b畛 ch畉n v thi hnh ti畉p t畛c sau kh畛i l畛nh finally.
Kh畛i finally l tu畛 箪, kh担ng b畉t bu畛c. Kh畛i ny 動畛c 畉t sau kh畛i catch. H畛 th畛ng s畉
duy畛t t畛 c但u l畛nh 畉u ti棚n c畛a kh畛i finally sau khi g畉p c但u l畛nh return hay l畛nh break
32 Core Java
動畛c d湛ng trong kh畛i try.
Kh畛i finally b畉o 畉m l炭c no c滴ng 動畛c th畛c thi, b畉t ch畉p c坦 ngo畉i l畛 x畉y ra hay kh担ng.
H狸nh 7.4 minh h畛a s畛 thi hnh c畛a c叩c kh畛i try, catch v finally.
try block
catch blockfinally block
finally block
No Exception Exception occurs
H狸nh 7.4 Kh畛i l畛nh try, catch v finally
H狸nh 7.2 s畛 d畛ng kh畛i finally. 畛 但y, kh畛i finally 動畛c thi hnh b畉t ch畉p
ArithmeticException c坦 x畉y ra hay kh担ng. Kh畛i ny khai b叩o c叩c ho畉t 畛ng thu d畛n.
Ch動董ng tr狸nh 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[])
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 33
{
new FinallyDemo(args);
}
}
K畉t xu畉t c畛a ch動董ng tr狸nh:
H狸nh 7.5 Kh畛i Finally
Trong v鱈 d畛 ny, c叩c c但u l畛nh trong kh畛i Finally lu担n lu担n thi hnh, b畉t ch畉p ngo畉i l畛 c坦
x畉y ra hay kh担ng. Trong k畉t xu畉t b棚n tr棚n, kh畛i finally 動畛c thi hnh m畉c d湛 kh担ng c坦
ngo畉i l畛 x畉y ra.
7.7 C叩c ngo畉i l畛 動畛c 畛nh ngh挑a v畛i l畛nh throw v throws
C叩c ngo畉i l畛 b畛 ch畉n v畛i s畛 tr畛 gi炭p c畛a t畛 kho叩 throw. T畛 kh坦a throw ch畛 ra m畛t ngo畉i
l畛 v畛a x畉y ra. To叩n t畛 c畛a throw l m畛t 畛i t動畛ng c畛a l畛p, l畛p ny 動畛c d畉n xu畉t t畛
Throwable.
o畉n l畛nh sau ch畛 ra c叩ch s畛 d畛ng c畛a l畛nh throw:
try
{
if (flag<0)
{
throw new MyException(); // user-defined
}
}
M畛t ph動董ng th畛c 董n c坦 th畛 ch畉n nhi畛u ngo畉i l畛. 畛 x畛 l箪 nh畛ng ngo畉i l畛 ny, ta c畉n
cung c畉p m畛t danh s叩ch c叩c ngo畉i l畛 m ph動董ng th畛c ch畉n trong ph畉n 畛nh ngh挑a c畛a
ph動董ng th畛c. Gi畉 s畛 r畉ng ph動董ng th畛c x() g畛i ph動董ng th畛c y(). Ph動董ng th畛c y() ch畉n
m畛t ngo畉i l畛 kh担ng 動畛c x畛 l箪. Trong tr動畛ng h畛p ny, ph動董ng th畛c g畛i x() n棚n khai b叩o
vi畛c ch畉n c湛ng m畛t ngo畉i l畛 v畛i ph動董ng th畛c 動畛c g畛i y(). Ta n棚n khai b叩o kh畛i try
catch trong ph動董ng th畛c x() 畛 畉m b畉o r畉ng ngo畉i l畛 kh担ng 動畛c truy畛n cho c叩c ph動董ng
th畛c m g畛i ph動董ng th畛c ny.
34 Core Java
o畉n m達 sau minh h畛a c叩ch s畛 d畛ng c畛a t畛 kho叩 throws 畛 x畛 l箪 nhi畛u ngo畉i 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畛 tr棚n, ph動董ng th畛c exceptionExample khai b叩o t畛 kho叩 throws. T畛 kho叩 ny
動畛c theo sau b畛i danh s叩ch c叩c ngo畉i l畛 m ph動董ng th畛c ny c坦 th畛 ch畉n  Trong tr動畛ng
h畛p ny l ExException v LookupException. Hm x畛 l箪 ngo畉i l畛 cho c叩c ph動董ng th畛c
ny n棚n khai b叩o c叩c kh畛i catch 畛 c坦 th畛 x畛 l箪 t畉t c畉 c叩c ngo畉i l畛 m c叩c ph動董ng th畛c
ch畉n.
L畛p Exception th畛c thi giao di畛n Throwable v cung c畉p c叩c t鱈nh nng h畛u d畛ng 畛
ph但n ph畛i c叩c ngo畉i l畛. 働u i畛m c畛a n坦 l t畉o c叩c l畛p ngo畉i l畛 動畛c 畛nh ngh挑a b畛i ng動畛i
d湛ng. 畛 lm i畛u ny, m畛t l畛p con c畛a l畛p Exception 動畛c t畉o ra. 働u i畛m c畛a l畛p con l
m畛t ki畛u ngo畉i l畛 m畛i c坦 th畛 b畛 b畉t gi畛 畛c l畉p t畛 c叩c lo畉i Throwable kh叩c.
Ch動董ng tr狸nh 7.3 minh h畛a ngo畉i l畛 動畛c 畛nh ngh挑a b畛i ng動畛i d湛ng ArraySizeException:
Ch動董ng tr狸nh 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;
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 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]));
}
}
L畛p 動畛c 畛nh ngh挑a b畛i ng動畛i d湛ng ArraySizeException l l畛p con c畛a l畛p
NegativeArraySizeException. Khi m畛t 畛i t動畛ng 動畛c t畉o t畛 l畛p ny, th担ng b叩o v畛 ngo畉i
l畛 動畛c in ra. Ph動董ng th畛c checkSize() 動畛c g畛i 畛 ch畉n ngo畉i l畛 ArraySizeException m
動畛c ch畛 ra b畛i m畛nh 畛 throws. K鱈ch th動畛c c畛a m畉ng 動畛c ki畛m tra trong c畉u tr炭c if.
N畉u k鱈ch th動畛c l s畛 但m th狸 畛i t動畛ng c畛a l畛p ArraySizeException 動畛c t畉o. Ph動董ng th畛c
call() 動畛c bao quanh trong kh畛i try-catch, l n董i m gi叩 tr畛 c畛a 畛i t動畛ng 動畛c in ra.
Ph動董ng th畛c call() c畉n 動畛c bao trong kh畛i try, 畛 cho kh畛i catch t動董ng 畛ng c坦 th畛 in
ra gi叩 tr畛.
K畉t xu畉t c畛a ch動董ng tr狸nh 動畛c ch畛 ra 畛 h狸nh 7.6.
H狸nh 7.6 Ngo畉i l畛 t畛 畛nh ngh挑a
36 Core Java
7.8 Danh s叩ch c叩c ngo畉i l畛
B畉ng sau 但y li畛t k棚 m畛t s畛 ngo畉i l畛:
Ngo畉i l畛 L畛p cha c畛a th畛 t畛 ph但n c畉p ngo畉i
l畛
RuntimeException L畛p c董 s畛 cho nhi畛u ngo畉i l畛 java.lang
ArthmeticException Tr畉ng th叩i l畛i v畛 s畛, v鱈 d畛 nh動 chia cho
0
IllegalAccessException L畛p kh担ng th畛 truy c畉p
IllegalArgumentException Ph動董ng th畛c nh畉n m畛t 畛i s畛 kh担ng
h畛p l畛
ArrayIndexOutOfBoundsExeption K鱈ch th動畛c c畛a m畉ng l畛n h董n 0 hay l畛n
h董n k鱈ch th動畛c th畉t s畛 c畛a m畉ng
NullPointerException Khi mu畛n truy c畉p 畛i t動畛ng null
SecurityException Vi畛c thi畉t l畉p c董 ch畉 b畉o m畉t kh担ng
動畛c ho畉t 畛ng
ClassNotFoundException Kh担ng th畛 n畉p l畛p y棚u c畉u
NumberFormatException Vi畛c chuy畛n 畛i kh担ng thnh c担ng t畛
chu畛i sang s畛 th畛c
AWTException Ngo畉i l畛 v畛 AWT
IOException L畛p cha c畛a c叩c ngo畉i l畛 I/O
FileNotFoundException Kh担ng th畛 畛nh v畛 t畉p tin
EOFException K畉t th炭c m畛t t畉p tin
NoSuchMethodException Ph動董ng th畛c y棚u c畉u kh担ng t畛n t畉i
InterruptedException Khi m畛t lu畛ng b畛 ng畉t
B畉ng 7.1 Danh s叩ch m畛t s畛 ngo畉i l畛
T坦m t畉t
 B畉t c畛 khi no m畛t l畛i xu畉t hi畛n trong khi thi hnh ch動董ng tr狸nh, ngh挑a l m畛t ngo畉i l畛
達 xu畉t hi畛n.
 Ngo畉i l畛 ph叩t sinh vo l炭c th畛c thi ch動董ng tr狸nh theo tr狸nh t畛 m達.
 M畛i ngo畉i l畛 ph叩t sinh ra ph畉i b畛 b畉t gi畛 , n畉u kh担ng 畛ng d畛ng s畉 b畛 ng畉t.
 Vi畛c x畛 l箪 ngo畉i l畛 cho ph辿p b畉n k畉t h畛p t畉t c畉 ti畉n tr狸nh x畛 l箪 l畛i trong m畛t n董i. L炭c
坦 o畉n m達 c畛a b畉n s畉 r探 rng h董n.
 Java s畛 d畛ng c叩c kh畛i try v catch 畛 x畛 l箪 c叩c ngo畉i l畛. C叩c c但u l畛nh trong kh畛i try
ch畉n ngo畉i l畛 c嘆n kh畛i catch x畛 l箪 ngo畉i l畛.
 C叩c kh畛i ch畛a nhi畛u catch c坦 th畛 動畛c s畛 d畛ng 畛 x畛 l箪 c叩c ki畛u ngo畉i l畛 kh叩c nhau
theo c叩ch kh叩c nhau.
 T畛 kho叩 throw li畛t k棚 c叩c ngo畉i l畛 m ph動董ng th畛c ch畉n.
 T畛 kho叩 throw ch畛 ra m畛t ngo畉i l畛 v畛a xu畉t hi畛n.
 Kh畛i finally khai b叩o c叩c c但u l畛nh tr畉 v畛 ngu畛n ti nguy棚n cho h畛 th畛ng v in nh畛ng
c但u th担ng b叩o.
!!! Check your progress & Exercise !!!
Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 37
38 Core Java

More Related Content

What's hot (20)

CoreJava_Chap9
CoreJava_Chap9CoreJava_Chap9
CoreJava_Chap9
lad1412
Tuan 3
Tuan 3Tuan 3
Tuan 3
H畛u M畛 L棚 Phan
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Levis Nickaster
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Levis Nickaster
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛chDecrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Levis Nickaster
Core java 4
Core java 4Core java 4
Core java 4
. .
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
Levis Nickaster
Hacking de4dot for fun - Bi d畛ch
Hacking de4dot for fun - Bi d畛chHacking de4dot for fun - Bi d畛ch
Hacking de4dot for fun - Bi d畛ch
Levis Nickaster
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Levis Nickaster
T湛y bi畉n Confuser
T湛y bi畉n ConfuserT湛y bi畉n Confuser
T湛y bi畉n Confuser
Levis Nickaster
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Levis Nickaster
Reverse Engineering .NET - Advanced Patching, Playing with IL
Reverse Engineering .NET - Advanced Patching, Playing with ILReverse Engineering .NET - Advanced Patching, Playing with IL
Reverse Engineering .NET - Advanced Patching, Playing with IL
Levis Nickaster
179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5
le dai
L畉p tr狸nh Java GUI
L畉p tr狸nh Java GUIL畉p tr狸nh Java GUI
L畉p tr狸nh Java GUI
Ha Bogay
Oop 7
Oop 7Oop 7
Oop 7
Thai Hoc Vu
干稼庄ゃ
干稼庄ゃ干稼庄ゃ
干稼庄ゃ
Chu Chu
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NETNh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Levis Nickaster
Dsd05 03-rmia
Dsd05 03-rmiaDsd05 03-rmia
Dsd05 03-rmia
Vn o Ti畉n
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
ANHMATTROI
CoreJava_Chap9
CoreJava_Chap9CoreJava_Chap9
CoreJava_Chap9
lad1412
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Constant Protection - B畉n d畛ch
Levis Nickaster
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Ph但n t鱈ch ConfuserEX - Invalid Metadata (bi d畛ch)
Levis Nickaster
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛chDecrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Decrypt c叩c MSIL methods m畛t c叩ch th畛 c担ng - Bi d畛ch
Levis Nickaster
Core java 4
Core java 4Core java 4
Core java 4
. .
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
C叩c c担ng c畛 c畉n thi畉t cho qu叩 tr狸nh Reverse Engineering .NET (b畉n 畉y 畛)
Levis Nickaster
Hacking de4dot for fun - Bi d畛ch
Hacking de4dot for fun - Bi d畛chHacking de4dot for fun - Bi d畛ch
Hacking de4dot for fun - Bi d畛ch
Levis Nickaster
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - Anti-tamper protection - B畉n d畛ch
Levis Nickaster
T湛y bi畉n Confuser
T湛y bi畉n ConfuserT湛y bi畉n Confuser
T湛y bi畉n Confuser
Levis Nickaster
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛chPh但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Ph但n t鱈ch Confuser 1.9.0.0 - method proxy confusion - B畉n d畛ch
Levis Nickaster
Reverse Engineering .NET - Advanced Patching, Playing with IL
Reverse Engineering .NET - Advanced Patching, Playing with ILReverse Engineering .NET - Advanced Patching, Playing with IL
Reverse Engineering .NET - Advanced Patching, Playing with IL
Levis Nickaster
179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5179887496 sdc1-bai tap-javacanban-5
179887496 sdc1-bai tap-javacanban-5
le dai
L畉p tr狸nh Java GUI
L畉p tr狸nh Java GUIL畉p tr狸nh Java GUI
L畉p tr狸nh Java GUI
Ha Bogay
干稼庄ゃ
干稼庄ゃ干稼庄ゃ
干稼庄ゃ
Chu Chu
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NETNh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Nh畛ng thu畉t ng畛 th動畛ng g畉p trong Reverse Engineering .NET
Levis Nickaster
Dsd05 03-rmia
Dsd05 03-rmiaDsd05 03-rmia
Dsd05 03-rmia
Vn o Ti畉n
Lap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi JavaLap trinh giao dien nguoi dung voi Java
Lap trinh giao dien nguoi dung voi Java
ANHMATTROI

Viewers also liked (20)

Bi 3: C畉u tr炭c ch動董ng tr狸nh
Bi 3: C畉u tr炭c ch動董ng tr狸nhBi 3: C畉u tr炭c ch動董ng tr狸nh
Bi 3: C畉u tr炭c ch動董ng tr狸nh
indochinasp
Core java 10
Core java 10Core java 10
Core java 10
. .
Core java 1
Core java 1Core java 1
Core java 1
. .
Java2 studyguide 2012
Java2 studyguide 2012Java2 studyguide 2012
Java2 studyguide 2012
Phuc Truong Ba
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinhNguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
SP Tin K34
Laptrinh java
Laptrinh javaLaptrinh java
Laptrinh java
Ton Tr畉n M畉nh
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
Lam Man
Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao mat
V滴 Sang
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java - Tr畉n 狸nh Qu畉
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java  - Tr畉n 狸nh Qu畉L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java  - Tr畉n 狸nh Qu畉
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java - Tr畉n 狸nh Qu畉
f3vthd
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
担ng L動董ng
Exceptions ref
Exceptions refExceptions ref
Exceptions ref
. .
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
clonestudy
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
担ng L動董ng
Bi 12: Giao ti畉p v畛i h畛 i畛u hnh
Bi 12: Giao ti畉p v畛i h畛 i畛u hnhBi 12: Giao ti畉p v畛i h畛 i畛u hnh
Bi 12: Giao ti畉p v畛i h畛 i畛u hnh
Anh Nguyen
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Tr狸nh Kim Ng但n
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Giang Vn
Android
AndroidAndroid
Android
Tieu Vi Vi
Bai07 bo nho
Bai07   bo nhoBai07   bo nho
Bai07 bo nho
V滴 Sang
N畛n t畉ng l畉p tr狸nh java (Core java)
N畛n t畉ng l畉p tr狸nh java (Core java)N畛n t畉ng l畉p tr狸nh java (Core java)
N畛n t畉ng l畉p tr狸nh java (Core java)
Tr畉n Thi棚n 畉i
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n AndroidB叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
Dlinh Truong
Bi 3: C畉u tr炭c ch動董ng tr狸nh
Bi 3: C畉u tr炭c ch動董ng tr狸nhBi 3: C畉u tr炭c ch動董ng tr狸nh
Bi 3: C畉u tr炭c ch動董ng tr狸nh
indochinasp
Core java 10
Core java 10Core java 10
Core java 10
. .
Core java 1
Core java 1Core java 1
Core java 1
. .
Java2 studyguide 2012
Java2 studyguide 2012Java2 studyguide 2012
Java2 studyguide 2012
Phuc Truong Ba
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinhNguyen le hien duyen   tin hoc 11 - bai 3 - cau truc chuong trinh
Nguyen le hien duyen tin hoc 11 - bai 3 - cau truc chuong trinh
SP Tin K34
Ky thuat l.trinh_java
Ky thuat l.trinh_javaKy thuat l.trinh_java
Ky thuat l.trinh_java
Lam Man
Bai10 he thong bao ve bao mat
Bai10   he thong bao ve bao matBai10   he thong bao ve bao mat
Bai10 he thong bao ve bao mat
V滴 Sang
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java - Tr畉n 狸nh Qu畉
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java  - Tr畉n 狸nh Qu畉L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java  - Tr畉n 狸nh Qu畉
L畉p tr狸nh h動畛ng 畛i t動畛ng v畛i Java - Tr畉n 狸nh Qu畉
f3vthd
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
Gi叩o Tr狸nh Java C董 B畉n ( Vietnamese)
担ng L動董ng
Exceptions ref
Exceptions refExceptions ref
Exceptions ref
. .
Laptrinh jdbc
Laptrinh jdbcLaptrinh jdbc
Laptrinh jdbc
clonestudy
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
L畉p Tr狸nh H動畛ng 畛i T動畛ng trong Java ( Vietnamese )
担ng L動董ng
Bi 12: Giao ti畉p v畛i h畛 i畛u hnh
Bi 12: Giao ti畉p v畛i h畛 i畛u hnhBi 12: Giao ti畉p v畛i h畛 i畛u hnh
Bi 12: Giao ti畉p v畛i h畛 i畛u hnh
Anh Nguyen
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Php module 1 - ttth dh khtn [khoahoclaptrinhweb.tin.vn]
Tr狸nh Kim Ng但n
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Pham Van Giang - Lop 10 - Chuong 2 - Bai 12
Giang Vn
Bai07 bo nho
Bai07   bo nhoBai07   bo nho
Bai07 bo nho
V滴 Sang
N畛n t畉ng l畉p tr狸nh java (Core java)
N畛n t畉ng l畉p tr狸nh java (Core java)N畛n t畉ng l畉p tr狸nh java (Core java)
N畛n t畉ng l畉p tr狸nh java (Core java)
Tr畉n Thi棚n 畉i
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n AndroidB叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
B叩o C叩o 畛 Ti X但y D畛ng Ph畉n M畛m Qu畉n L鱈 Kh叩ch Hng Tr棚n Android
Dlinh Truong

Similar to Core java 7 (17)

Oop unit 10 ngo畉i l畛
Oop unit 10 ngo畉i l畛Oop unit 10 ngo畉i l畛
Oop unit 10 ngo畉i l畛
Tr叩ng H Vi畉t
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛cGi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
ThoL718186
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
L棚 Anh
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
Cusanlui
CoreJava_Chap7
CoreJava_Chap7CoreJava_Chap7
CoreJava_Chap7
lad1412
CoreJava_Chap6
CoreJava_Chap6CoreJava_Chap6
CoreJava_Chap6
lad1412
TT_MTKPM.pptx
TT_MTKPM.pptxTT_MTKPM.pptx
TT_MTKPM.pptx
TriPhan74
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
ssuserd01a5c
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPTBi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
MasterCode.vn
temp.pdf
temp.pdftemp.pdf
temp.pdf
ThienHuynhDuc3
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02
huynhtrong774129
Java ease learning(1)
Java ease learning(1)Java ease learning(1)
Java ease learning(1)
Nguyen Xuan
Oop unit 10 ngo畉i l畛
Oop unit 10 ngo畉i l畛Oop unit 10 ngo畉i l畛
Oop unit 10 ngo畉i l畛
Tr叩ng H Vi畉t
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛cGi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
Gi畛i thi畛u h畛 qu畉n tr畛 csdl oracle v th畛 t畛c
ThoL718186
Lap trinh java hieu qua
Lap trinh java hieu quaLap trinh java hieu qua
Lap trinh java hieu qua
L棚 Anh
Unit Test with test JUNIT
Unit Test with test JUNIT Unit Test with test JUNIT
Unit Test with test JUNIT
Cusanlui
CoreJava_Chap7
CoreJava_Chap7CoreJava_Chap7
CoreJava_Chap7
lad1412
CoreJava_Chap6
CoreJava_Chap6CoreJava_Chap6
CoreJava_Chap6
lad1412
TT_MTKPM.pptx
TT_MTKPM.pptxTT_MTKPM.pptx
TT_MTKPM.pptx
TriPhan74
OOP_02_Java can ban.pdf
OOP_02_Java can ban.pdfOOP_02_Java can ban.pdf
OOP_02_Java can ban.pdf
ssuserd01a5c
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPTBi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
Bi 3: C畉u tr炭c i畛u khi畛n, hm v x畛 l箪 s畛 ki畛n - Gi叩o tr狸nh FPT
MasterCode.vn
Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02Storedprocedure 140411073406-phpapp02
Storedprocedure 140411073406-phpapp02
huynhtrong774129
Java ease learning(1)
Java ease learning(1)Java ease learning(1)
Java ease learning(1)
Nguyen Xuan

More from . . (14)

Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11
. .
Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10
. .
Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09
. .
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08
. .
Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05
. .
Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02
. .
Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01
. .
Cq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thckCq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thck
. .
Cq lt hdt-th2011-02-tuan04
Cq lt hdt-th2011-02-tuan04Cq lt hdt-th2011-02-tuan04
Cq lt hdt-th2011-02-tuan04
. .
Cautrucdulieu full
Cautrucdulieu fullCautrucdulieu full
Cautrucdulieu full
. .
Baitaprdbms
BaitaprdbmsBaitaprdbms
Baitaprdbms
. .
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
. .
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
. .
ToanRoirac
ToanRoiracToanRoirac
ToanRoirac
. .
Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11Cq lt hdt-th2011-01-tuan11
Cq lt hdt-th2011-01-tuan11
. .
Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10Cq lt hdt-th2011-01-tuan10
Cq lt hdt-th2011-01-tuan10
. .
Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09Cq lt hdt-th2011-01-tuan09
Cq lt hdt-th2011-01-tuan09
. .
Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08Cq lt hdt-th2011-01-tuan08
Cq lt hdt-th2011-01-tuan08
. .
Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05Cq lt hdt-th2011-01-tuan05
Cq lt hdt-th2011-01-tuan05
. .
Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02Cq lt hdt-th2011-01-tuan02
Cq lt hdt-th2011-01-tuan02
. .
Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01Cq lt hdt-th2011-01-tuan01
Cq lt hdt-th2011-01-tuan01
. .
Cq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thckCq lt hdt-th2011-01-thck
Cq lt hdt-th2011-01-thck
. .
Cq lt hdt-th2011-02-tuan04
Cq lt hdt-th2011-02-tuan04Cq lt hdt-th2011-02-tuan04
Cq lt hdt-th2011-02-tuan04
. .
Cautrucdulieu full
Cautrucdulieu fullCautrucdulieu full
Cautrucdulieu full
. .
Baitaprdbms
BaitaprdbmsBaitaprdbms
Baitaprdbms
. .
Bai tap va loi giai sql
Bai tap va loi giai sqlBai tap va loi giai sql
Bai tap va loi giai sql
. .
Cau lenh truy_van_sql
Cau lenh truy_van_sqlCau lenh truy_van_sql
Cau lenh truy_van_sql
. .
ToanRoirac
ToanRoiracToanRoirac
ToanRoirac
. .

Core java 7

  • 1. Ch動董ng 7 X畛 L NGO畉I L畛 (Exception Handling) Sau khi k畉t th炭c ch動董ng ny, b畉n c坦 th畛 n畉m 動畛c c叩c n畛i dung sau: 畛nh ngh挑a m畛t ngo畉i l畛 (exception) Hi畛u 動畛c m畛c 鱈ch c畛a vi畛c x畛 l箪 ngo畉i l畛 Hi畛u 動畛c c叩c ki畛u ngo畉i l畛 kh叩c nhau trong Java M担 t畉 m担 h狸nh x畛 l箪 ngo畉i l畛 Hi畛u 動畛c c叩c kh畛i l畛nh ch畛a nhi畛u catch M担 t畉 c叩ch s畛 d畛ng c叩c kh畛i try, catch v finally Gi畉i th鱈ch c叩ch s畛 d畛ng c叩c t畛 kho叩 throw v throws T畛 t畉o ra c叩c ngo畉i l畛 7.1 Gi畛i thi畛u Exception l m畛t l畛i 畉c bi畛t. L畛i ny xu畉t hi畛n vo l炭c th畛c thi ch動董ng tr狸nh. C叩c tr畉ng th叩i kh担ng b狸nh th動畛ng x畉y ra trong khi thi hnh ch動董ng tr狸nh t畉o ra c叩c exception. Nh畛ng tr畉ng th叩i ny kh担ng 動畛c bi畉t tr動畛c trong khi ta ang x但y d畛ng ch動董ng tr狸nh. N畉u b畉n kh担ng ph但n ph畛i c叩c tr畉ng th叩i ny th狸 exception c坦 th畛 b畛 k畉t th炭c 畛t ng畛t. V鱈 d畛, vi畛c chia cho 0 s畉 t畉o m畛t l畛i trong ch動董ng tr狸nh. Ng担n ng畛 Java cung c畉p b畛 m叩y d湛ng 畛 x畛 l箪 ngo畉i l畛 r畉t tuy畛t v畛i. Vi畛c x畛 l箪 ny lm h畉n ch畉 t畛i a tr動畛ng h畛p h畛 th畛ng b畛 ph叩 v畛 (crash) hay h畛 th畛ng b畛 ng畉t 畛t ng畛t. T鱈nh nng ny lm cho Java l m畛t ng担n ng畛 l畉p tr狸nh m畉nh. 7.2 M畛c 鱈ch c畛a vi畛c x畛 l箪 ngo畉i l畛 M畛t ch動董ng tr狸nh n棚n c坦 c董 ch畉 x畛 l箪 ngo畉i l畛 th鱈ch h畛p. N畉u kh担ng, ch動董ng tr狸nh s畉 b畛 ng畉t khi m畛t exception x畉y ra. Trong tr動畛ng h畛p 坦, t畉t c畉 c叩c ngu畛n ti nguy棚n m h畛 th畛ng tr動畛c kia ph但n ph畛i s畉 動畛c di d畛i trong c湛ng tr畉ng th叩i. i畛u ny g但y l達ng ph鱈 ti nguy棚n. 畛 tr叩nh tr動畛ng h畛p ny, t畉t c畉 c叩c ngu畛n ti nguy棚n m h畛 th畛ng ph但n ph畛i n棚n 動畛c thu h畛i l畉i. Ti畉n tr狸nh ny 嘆i h畛i c董 ch畉 x畛 l箪 ngo畉i l畛 th鱈ch h畛p. Cho v鱈 d畛, x辿t thao t叩c nh畉p xu畉t (I/O) trong m畛t t畉p tin. N畉u vi畛c chuy畛n 畛i ki畛u d畛 li畛u kh担ng th畛c hi畛n 炭ng, m畛t ngo畉i l畛 s畉 x畉y ra v ch動董ng tr狸nh b畛 h畛y m kh担ng 坦ng l畉i t畉p tin. L炭c 坦 t畉p tin d畛 b畛 h動 h畉i v c叩c ngu畛n ti nguy棚n 動畛c c畉p ph叩t cho t畉p tin kh担ng 動畛c thu h畛i l畉i cho h畛 th畛ng. 7.3 X畛 l箪 ngo畉i l畛 Khi m畛t ngo畉i l畛 x畉y ra, 畛i t動畛ng t動董ng 畛ng v畛i ngo畉i l畛 坦 動畛c t畉o ra. 畛i t動畛ng ny sau 坦 動畛c truy畛n cho ph動董ng th畛c l n董i m ngo畉i l畛 x畉y ra. 畛i t動畛ng ny ch畛a th担ng tin chi ti畉t v畛 ngo畉i l畛. Th担ng tin ny c坦 th畛 動畛c nh畉n v畛 v 動畛c x畛 l箪. C叩c m担i tr動畛ng runtime nh動 IllegalAccessException, EmptyStackException v.v c坦 th畛 ch畉n 動畛c c叩c ngo畉i l畛. o畉n m達 trong ch動董ng tr狸nh 担i khi c坦 th畛 t畉o ra c叩c ngo畉i l畛. L畛p throwable Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 27
  • 2. 動畛c Java cung c畉p l l畛p tr棚n nh畉t c畛a l畛p Exception , l畛p ny l l畛p cha c畛a c叩c ngo畉i l畛 kh叩c nhau. 7.4 M担 h狸nh x畛 l箪 ngo畉i l畛 Trong Java, m担 h狸nh x畛 l箪 ngo畉i l畛 ki畛m tra vi畛c x畛 l箪 nh畛ng hi畛u 畛ng l畛 (l畛i), 動畛c bi畉t 畉n l m担 h狸nh catch v throw. Trong m担 h狸nh ny, khi m畛t l畛i x畉y ra, m畛t ngo畉i l畛 s畉 b畛 ch畉n v 動畛c 動a vo trong m畛t kh畛i. Ng動畛i l畉p tr狸nh vi棚n n棚n x辿t c叩c tr畉ng th叩i ngo畉i l畛 畛c l畉p nhau t畛 vi畛c i畛u khi畛n th担ng th動畛ng trong ch動董ng tr狸nh. C叩c ngo畉i l畛 ph畉i 動畛c b畉t gi畛 n畉u kh担ng ch動董ng tr狸nh s畉 b畛 ng畉t. Ng担n ng畛 Java cung c畉p 5 t畛 kho叩 sau 畛 x畛 l箪 c叩c ngo畉i l畛: try catch throw throws finally D動畛i 但y l c畉u tr炭c c畛a m担 h狸nh x畛 l箪 ngo畉i l畛: try { // place code that is expected to throw an exception } 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. } 7.4.1 C叩c 動u i畛m c畛a m担 h狸nh catch v throw 28 Core Java
  • 3. M担 h狸nh catch v throw c坦 hai 動u i畛m: Ng動畛i l畉p tr狸nh vi棚n ph畉i ph但n ph畛i tr畉ng th叩i l畛i ch畛 vo nh畛ng n董i c畉n thi畉t. Kh担ng c畉n ph畉i th畛c hi畛n t畉i m畛i m畛c. M畛t th担ng b叩o l畛i c坦 th畛 動畛c in ra khi ti畉n hnh x畛 l箪 ngo畉i l畛. 7.4.2 C叩c kh畛i try v catch Kh畛i try-catch 動畛c s畛 d畛ng 畛 thi hnh m担 h狸nh catch v throw c畛a vi畛c x畛 l箪 ngo畉i l畛. Kh畛i try ch畛a m畛t b畛 c叩c l畛nh c坦 th畛 thi hnh 動畛c. C叩c ngo畉i l畛 c坦 th畛 b畛 ch畉n khi thi hnh nh畛ng c但u l畛nh ny. Ph動董ng th畛c d湛ng 畛 ch畉n ngo畉i l畛 c坦 th畛 動畛c khai b叩o trong kh畛i try. M畛t hay nhi畛u kh畛i catch c坦 th畛 theo sau kh畛i try. C叩c kh畛i catch ny b畉t c叩c ngo畉i l畛 b畛 ch畉n trong kh畛i try. H達y nh狸n kh畛i try d動畛i 但y: try { doFileProcessing(); // user-defined method displayResults(); } catch (Exception e) // exception object { System.err.println(Error : + e.toString()); e.printStackTrace(); } 畛 但y, e l 畛i t動畛ng c畛a l畛p Exception. Ch炭ng ta c坦 th畛 s畛 d畛ng 畛i t動畛ng ny 畛 in c叩c chi ti畉t v畛 ngo畉i l畛. C叩c ph動董ng th畛c toString v printStackTrace 動畛c s畛 d畛ng 畛 m担 t畉 c叩c exception ph叩t sinh ra. H狸nh sau ch畛 ra k畉t xu畉t c畛a ph動董ng th畛c printStackTrace(). H狸nh 7.1 Kh畛i Try v Catch 畛 b畉t gi畛 b畉t c畛 ngo畉i l畛 no, ta ph畉i ch畛 ra ki畛u ngo畉i l畛 l Exception. catch(Exception e) Khi ngo畉i l畛 b畛 b畉t gi畛 kh担ng bi畉t thu畛c ki畛u no, ch炭ng ta c坦 th畛 s畛 d畛ng l畛p Exception 畛 b畉t ngo畉i l畛 坦. Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 29
  • 4. Kh畛i catch() b畉t gi畛 b畉t c畛 c叩c l畛i x畉y ra trong khi thi hnh ph動董ng th畛c doFileProcessing hay display. N畉u m畛t l畛i x畉y ra trong khi thi hnh ph動董ng th畛c doFileProcessing(), l炭c 坦 ph動董ng th畛c displayResults() s畉 kh担ng bao gi畛 動畛c g畛i. S畛 thi hnh s畉 ti畉p t畛c th畛c hi畛n kh畛i catch. 畛 c坦 nhi畛u l畛p x畛 l箪 l畛i h董n, nh動 l LookupException thay v狸 m畛t 畛i t動畛ng ngo畉i l畛 chung (Exception e), l畛i th畉t s畛 s畉 l m畛t instance c畛a LookupException hay m畛t trong s畛 nh畛ng l畛p con c畛a n坦. L畛i s畉 動畛c truy畛n qua kh畛i try catch cho t畛i khi ch炭ng b畉t g畉p m畛t catch tham chi畉u t畛i n坦 hay ton b畛 ch動董ng tr狸nh ph畉i b畛 hu畛 b畛. 7.5 C叩c kh畛i ch畛a nhi畛u Catch C叩c kh畛i ch畛a nhi畛u catch x畛 l箪 c叩c ki畛u ngo畉i l畛 kh叩c nhau m畛t c叩ch 畛c l畉p. Ch炭ng 動畛c li畛t k棚 trong o畉n m達 sau: try { doFileProcessing(); // user defined mothod displayResults(); // user defined method } catch(LookupException e) // e Lookupexception object { handleLookupException(e); // user defined handler } catch(Exception e) { System.err.println(Error: + e.printStackTrace()); } } Trong tr動畛ng h畛p ny, kh畛i catch 畉u ti棚n s畉 b畉t gi畛 m畛t LockupException. Kh畛i catch th畛 hai s畉 x畛 l箪 ki畛u ngo畉i l畛 kh叩c v畛i kh畛i catch th畛 nh畉t. M畛t ch動董ng tr狸nh c滴ng c坦 th畛 ch畛a c叩c kh畛i try l畛ng nhau. V鱈 d畛 o畉n m達 d動畛i 但y: try { statement 1; statement 2; try { statement1; statement2; } catch(Exception e) // of the inner try block { } 30 Core Java
  • 5. } catch(Exception e) // of the outer try block { } Khi s畛 d畛ng c叩c try l畛ng nhau, kh畛i try b棚n trong 動畛c thi hnh 畉u ti棚n. B畉t k畛 ngo畉i l畛 no b畛 ch畉n trong kh畛i try s畉 b畛 b畉t gi畛 trong c叩c kh畛i catch theo sau. N畉u kh畛i catch th鱈ch h畛p kh担ng 動畛c t狸m th畉y th狸 c叩c kh畛i catch c畛a c叩c kh畛i try b棚n ngoi s畉 動畛c xem x辿t. N畉u kh担ng, Java Runtime Environment x畛 l箪 c叩c ngo畉i l畛. ch動董ng tr狸nh 7.1 minh h畛a c叩ch s畛 d畛ng c叩c kh畛i try v catch. Ch動董ng tr狸nh 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); } } } K畉t xu畉t c畛a ch動董ng tr狸nh: H狸nh 7.2 ArithmeticException Trong ch動董ng tr狸nh ny, m畛t s畛 動畛c chia cho 0. 但y kh担ng l to叩n t畛 s畛 h畛c h畛p l畛. Do 坦 m畛t ngo畉i l畛 b畛 ch畉n v 動畛c b畉t gi畛 trong kh畛i catch. Khi ng動畛i l畉p tr狸nh vi棚n nh畉n bi畉t 動畛c lo畉i ngo畉i l畛 no c坦 th畛 x畉y ra, anh ta hay c担 ta vi畉t m畛t c但u l畛nh trong kh畛i catch. 畛 但y, a 動畛c s畛 d畛ng nh動 m畛t 畛i t動畛ng c畛a Arithmaticexception 畛 in c叩c chi Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 31
  • 6. ti畉t v畛 c叩c to叩n t畛 ngo畉i l畛 m h畛 th畛ng cung c畉p. N畉u b畉n thay th畉 l畛nh System.out.println c畛a kh畛i catch b畉ng l畛nh System.out.println(a.getMessage()) th狸 k畉t xu畉t c畛a ch動董ng tr狸nh nh動 sau: H狸nh 7.3 C但u th担ng b叩o l畛i Khi c叩c kh畛i try 動畛c s畛 d畛ng m kh担ng c坦 c叩c kh畛i catch no, ch動董ng tr狸nh s畉 bi棚n d畛ch m kh担ng g畉p s畛 c畛 no nh動ng s畉 b畛 ng畉t khi th畛c thi. B畛i v狸 ngo畉i l畛 達 x畉y ra khi th畛c thi ch動董ng tr狸nh. 7.6 Kh畛i finally Khi m畛t ngo畉i l畛 xu畉t hi畛n, ph動董ng th畛c ang 動畛c th畛c thi c坦 th畛 b畛 d畛ng m kh担ng 動畛c thi hnh ton v畉n. N畉u i畛u ny x畉y ra, th狸 c叩c o畉n m達 (v鱈 d畛 nh動 o畉n m達 v畛i ch畛c nng thu h畛i ti nguy棚n c坦 c叩c l畛nh 坦ng l畉i t畉p tin khai b叩o cu畛i ph動董ng th畛c) s畉 kh担ng bao gi畛 動畛c g畛i. Java cung c畉p kh畛i finally 畛 gi畉i quy畉t vi畛c ny. Kh畛i finally th畛c hi畛n t畉t c畉 c叩c vi畛c thu d畛n khi m畛t ngo畉i l畛 x畉y ra. Kh畛i ny c坦 th畛 動畛c s畛 d畛ng k畉t h畛p v畛i kh畛i try. Kh畛i finally ch畛a c叩c c但u l畛nh thu h畛i ti nguy棚n v畛 cho h畛 th畛ng hay l畛nh in ra c叩c c但u th担ng b叩o. C叩c l畛nh ny bao g畛m: 坦ng t畉p tin. 坦ng l畉i b畛 k畉t qu畉 (動畛c s畛 d畛ng trong ch動董ng tr狸nh c董 s畛 d畛 li畛u). 坦ng l畉i c叩c k畉t n畛i 動畛c t畉o trong c董 s畛 d畛 li畛u. try { doSomethingThatMightThrowAnException(); } finally { cleanup(); } Ph動董ng th畛c cleanup() 動畛c g畛i n畉u ph動董ng th畛c doSomethingThatMightThrowAnException() ch畉n m畛t ngo畉i l畛. M畉t kh叩c cleanup() c滴ng 動畛c g畛i ngay khi kh担ng c坦 ngo畉i l畛 no b畛 ch畉n v thi hnh ti畉p t畛c sau kh畛i l畛nh finally. Kh畛i finally l tu畛 箪, kh担ng b畉t bu畛c. Kh畛i ny 動畛c 畉t sau kh畛i catch. H畛 th畛ng s畉 duy畛t t畛 c但u l畛nh 畉u ti棚n c畛a kh畛i finally sau khi g畉p c但u l畛nh return hay l畛nh break 32 Core Java
  • 7. 動畛c d湛ng trong kh畛i try. Kh畛i finally b畉o 畉m l炭c no c滴ng 動畛c th畛c thi, b畉t ch畉p c坦 ngo畉i l畛 x畉y ra hay kh担ng. H狸nh 7.4 minh h畛a s畛 thi hnh c畛a c叩c kh畛i try, catch v finally. try block catch blockfinally block finally block No Exception Exception occurs H狸nh 7.4 Kh畛i l畛nh try, catch v finally H狸nh 7.2 s畛 d畛ng kh畛i finally. 畛 但y, kh畛i finally 動畛c thi hnh b畉t ch畉p ArithmeticException c坦 x畉y ra hay kh担ng. Kh畛i ny khai b叩o c叩c ho畉t 畛ng thu d畛n. Ch動董ng tr狸nh 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[]) Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 33
  • 8. { new FinallyDemo(args); } } K畉t xu畉t c畛a ch動董ng tr狸nh: H狸nh 7.5 Kh畛i Finally Trong v鱈 d畛 ny, c叩c c但u l畛nh trong kh畛i Finally lu担n lu担n thi hnh, b畉t ch畉p ngo畉i l畛 c坦 x畉y ra hay kh担ng. Trong k畉t xu畉t b棚n tr棚n, kh畛i finally 動畛c thi hnh m畉c d湛 kh担ng c坦 ngo畉i l畛 x畉y ra. 7.7 C叩c ngo畉i l畛 動畛c 畛nh ngh挑a v畛i l畛nh throw v throws C叩c ngo畉i l畛 b畛 ch畉n v畛i s畛 tr畛 gi炭p c畛a t畛 kho叩 throw. T畛 kh坦a throw ch畛 ra m畛t ngo畉i l畛 v畛a x畉y ra. To叩n t畛 c畛a throw l m畛t 畛i t動畛ng c畛a l畛p, l畛p ny 動畛c d畉n xu畉t t畛 Throwable. o畉n l畛nh sau ch畛 ra c叩ch s畛 d畛ng c畛a l畛nh throw: try { if (flag<0) { throw new MyException(); // user-defined } } M畛t ph動董ng th畛c 董n c坦 th畛 ch畉n nhi畛u ngo畉i l畛. 畛 x畛 l箪 nh畛ng ngo畉i l畛 ny, ta c畉n cung c畉p m畛t danh s叩ch c叩c ngo畉i l畛 m ph動董ng th畛c ch畉n trong ph畉n 畛nh ngh挑a c畛a ph動董ng th畛c. Gi畉 s畛 r畉ng ph動董ng th畛c x() g畛i ph動董ng th畛c y(). Ph動董ng th畛c y() ch畉n m畛t ngo畉i l畛 kh担ng 動畛c x畛 l箪. Trong tr動畛ng h畛p ny, ph動董ng th畛c g畛i x() n棚n khai b叩o vi畛c ch畉n c湛ng m畛t ngo畉i l畛 v畛i ph動董ng th畛c 動畛c g畛i y(). Ta n棚n khai b叩o kh畛i try catch trong ph動董ng th畛c x() 畛 畉m b畉o r畉ng ngo畉i l畛 kh担ng 動畛c truy畛n cho c叩c ph動董ng th畛c m g畛i ph動董ng th畛c ny. 34 Core Java
  • 9. o畉n m達 sau minh h畛a c叩ch s畛 d畛ng c畛a t畛 kho叩 throws 畛 x畛 l箪 nhi畛u ngo畉i 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畛 tr棚n, ph動董ng th畛c exceptionExample khai b叩o t畛 kho叩 throws. T畛 kho叩 ny 動畛c theo sau b畛i danh s叩ch c叩c ngo畉i l畛 m ph動董ng th畛c ny c坦 th畛 ch畉n Trong tr動畛ng h畛p ny l ExException v LookupException. Hm x畛 l箪 ngo畉i l畛 cho c叩c ph動董ng th畛c ny n棚n khai b叩o c叩c kh畛i catch 畛 c坦 th畛 x畛 l箪 t畉t c畉 c叩c ngo畉i l畛 m c叩c ph動董ng th畛c ch畉n. L畛p Exception th畛c thi giao di畛n Throwable v cung c畉p c叩c t鱈nh nng h畛u d畛ng 畛 ph但n ph畛i c叩c ngo畉i l畛. 働u i畛m c畛a n坦 l t畉o c叩c l畛p ngo畉i l畛 動畛c 畛nh ngh挑a b畛i ng動畛i d湛ng. 畛 lm i畛u ny, m畛t l畛p con c畛a l畛p Exception 動畛c t畉o ra. 働u i畛m c畛a l畛p con l m畛t ki畛u ngo畉i l畛 m畛i c坦 th畛 b畛 b畉t gi畛 畛c l畉p t畛 c叩c lo畉i Throwable kh叩c. Ch動董ng tr狸nh 7.3 minh h畛a ngo畉i l畛 動畛c 畛nh ngh挑a b畛i ng動畛i d湛ng ArraySizeException: Ch動董ng tr狸nh 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; Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 35
  • 10. 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])); } } L畛p 動畛c 畛nh ngh挑a b畛i ng動畛i d湛ng ArraySizeException l l畛p con c畛a l畛p NegativeArraySizeException. Khi m畛t 畛i t動畛ng 動畛c t畉o t畛 l畛p ny, th担ng b叩o v畛 ngo畉i l畛 動畛c in ra. Ph動董ng th畛c checkSize() 動畛c g畛i 畛 ch畉n ngo畉i l畛 ArraySizeException m 動畛c ch畛 ra b畛i m畛nh 畛 throws. K鱈ch th動畛c c畛a m畉ng 動畛c ki畛m tra trong c畉u tr炭c if. N畉u k鱈ch th動畛c l s畛 但m th狸 畛i t動畛ng c畛a l畛p ArraySizeException 動畛c t畉o. Ph動董ng th畛c call() 動畛c bao quanh trong kh畛i try-catch, l n董i m gi叩 tr畛 c畛a 畛i t動畛ng 動畛c in ra. Ph動董ng th畛c call() c畉n 動畛c bao trong kh畛i try, 畛 cho kh畛i catch t動董ng 畛ng c坦 th畛 in ra gi叩 tr畛. K畉t xu畉t c畛a ch動董ng tr狸nh 動畛c ch畛 ra 畛 h狸nh 7.6. H狸nh 7.6 Ngo畉i l畛 t畛 畛nh ngh挑a 36 Core Java
  • 11. 7.8 Danh s叩ch c叩c ngo畉i l畛 B畉ng sau 但y li畛t k棚 m畛t s畛 ngo畉i l畛: Ngo畉i l畛 L畛p cha c畛a th畛 t畛 ph但n c畉p ngo畉i l畛 RuntimeException L畛p c董 s畛 cho nhi畛u ngo畉i l畛 java.lang ArthmeticException Tr畉ng th叩i l畛i v畛 s畛, v鱈 d畛 nh動 chia cho 0 IllegalAccessException L畛p kh担ng th畛 truy c畉p IllegalArgumentException Ph動董ng th畛c nh畉n m畛t 畛i s畛 kh担ng h畛p l畛 ArrayIndexOutOfBoundsExeption K鱈ch th動畛c c畛a m畉ng l畛n h董n 0 hay l畛n h董n k鱈ch th動畛c th畉t s畛 c畛a m畉ng NullPointerException Khi mu畛n truy c畉p 畛i t動畛ng null SecurityException Vi畛c thi畉t l畉p c董 ch畉 b畉o m畉t kh担ng 動畛c ho畉t 畛ng ClassNotFoundException Kh担ng th畛 n畉p l畛p y棚u c畉u NumberFormatException Vi畛c chuy畛n 畛i kh担ng thnh c担ng t畛 chu畛i sang s畛 th畛c AWTException Ngo畉i l畛 v畛 AWT IOException L畛p cha c畛a c叩c ngo畉i l畛 I/O FileNotFoundException Kh担ng th畛 畛nh v畛 t畉p tin EOFException K畉t th炭c m畛t t畉p tin NoSuchMethodException Ph動董ng th畛c y棚u c畉u kh担ng t畛n t畉i InterruptedException Khi m畛t lu畛ng b畛 ng畉t B畉ng 7.1 Danh s叩ch m畛t s畛 ngo畉i l畛 T坦m t畉t B畉t c畛 khi no m畛t l畛i xu畉t hi畛n trong khi thi hnh ch動董ng tr狸nh, ngh挑a l m畛t ngo畉i l畛 達 xu畉t hi畛n. Ngo畉i l畛 ph叩t sinh vo l炭c th畛c thi ch動董ng tr狸nh theo tr狸nh t畛 m達. M畛i ngo畉i l畛 ph叩t sinh ra ph畉i b畛 b畉t gi畛 , n畉u kh担ng 畛ng d畛ng s畉 b畛 ng畉t. Vi畛c x畛 l箪 ngo畉i l畛 cho ph辿p b畉n k畉t h畛p t畉t c畉 ti畉n tr狸nh x畛 l箪 l畛i trong m畛t n董i. L炭c 坦 o畉n m達 c畛a b畉n s畉 r探 rng h董n. Java s畛 d畛ng c叩c kh畛i try v catch 畛 x畛 l箪 c叩c ngo畉i l畛. C叩c c但u l畛nh trong kh畛i try ch畉n ngo畉i l畛 c嘆n kh畛i catch x畛 l箪 ngo畉i l畛. C叩c kh畛i ch畛a nhi畛u catch c坦 th畛 動畛c s畛 d畛ng 畛 x畛 l箪 c叩c ki畛u ngo畉i l畛 kh叩c nhau theo c叩ch kh叩c nhau. T畛 kho叩 throw li畛t k棚 c叩c ngo畉i l畛 m ph動董ng th畛c ch畉n. T畛 kho叩 throw ch畛 ra m畛t ngo畉i l畛 v畛a xu畉t hi畛n. Kh畛i finally khai b叩o c叩c c但u l畛nh tr畉 v畛 ngu畛n ti nguy棚n cho h畛 th畛ng v in nh畛ng c但u th担ng b叩o. !!! Check your progress & Exercise !!! Ch動董ng 7: X畛 l箪 ngo畉i l畛 (Exception Handling) 37