DANH MỤC TÀI LIỆU
Hướng dẫn xử lý hướng ngoại lệ trong quá trình lập trình Java
H ng d n x lý h ng ngo i l trong quá trình l p trình Javaướ ướ ạ ệ
Gi i thi uớ ệ
Exception là m t lo i l i đ c bi t. L i này xu t hi n vào 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 hành ươ ườ ả
ch ng trình t o ra các exception. Nh ng tr ng thái này 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 x lý các ướ ươ ế ạ
tr ng thái này thì ch ng trình 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 c ch ẽ ạ ươ ơ ế
dùng đ x lý ngo i l r t hi u qu . Vi c x lý này làm h n ch t i đa ế ố
tr ng h p h th ng b h ng (crash) hay h th ng b ng t đ t ng t. Tính ườ ệ ố ệ ố ắ ộ
năng này làm cho Java tr thành m t ngôn ng l p trình m nh. ữ ậ
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 ngo i l x y ra. Trong tr ng h p đó, t t ươ ẽ ị ệ ả ườ
c các ngu n tài nguyên mà h th ng đã c p không đ c gi i phóng. Đi u ệ ố ượ
này gây lãng phí tài nguyên. Đ tránh tr ng h p này, t t c các ngu n tài ườ ấ ả
nguyên mà h th ng c p nên đ c thu h i l i. Ti n trình này đòi h i c ượ ồ ạ ế ơ
ch x lý ngo i l thích h p.ế ử
Xét thao tác vào ra (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 t p tin l i. Lúc đó t p tin d b h h i và các ngu n tài ễ ị ư ạ
nguyên đ c c p phát cho t p tin không đ c tr l i cho h th ng.ượ ượ ả ạ
X lý ngo i l ạ ệ
Khi m t ngo i l x y ra, đ i t ng (object) t ng ng v i ngo i l đó ạ ệ ố ượ ươ ạ ệ
đ c t o ra. Đ i t ng này sau đó đ c truy n cho ph ng th c là n i màượ ố ượ ượ ươ ơ
ngo i l x y ra. Đ i t ng này ch a thông tin chi ti t v ngo i l . Thông ạ ệ ố ượ ế ạ ệ
tin này có th đ c nh n v và đ c x lý. Các môi tr ng runtime nh ể ượ ượ ườ ư
‘IllegalAccessException’, ‘EmptyStackException’ v.v… có th t o ra ngo i ể ạ
l . Ch ng trình đôi khi có th t t o ra ngo i l . L p ‘Throwable’ đ c ươ ể ự ạ ượ
Java cung c p là l p trên cùng c a l p Exception (l p đ u tiên trong cây ủ ớ
th a k ), l p này là l p cha c a t t c các ngo i l khác. ế ạ ệ
Mô hình x lý ngo i l ạ ệ
Trong Java, mô hình x lý ngo i l giám sát vi c th c thi mã đ phát hi n ạ ệ
ngo i l . Mô hình x lý ngo i l c a Java đ c g i là ‘catch and throw’. ạ ệ ạ ệ ượ
Trong mô hình này, khi m t ngo i l x y ra, ngo i l s b ch n và ch ng ệ ẽ ươ
trình chuy n đ n m t kh i x lý ngo i l . Ng i l p trình ph i x lý các ế ạ ệ ườ ậ
ngo i l khác nhau có th phát sinh trong ch ng trình. Các ngo i l ph i ạ ệ ươ ạ ệ
đ c x lý, ho c thoát kh i ch ng trình khi nó x y ra.ượ ử ươ
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
{
// đo n mã có kh năng gây ra ngo i l ạ ệ
}
catch(Exception e1)
{
// N u các l nh trong kh i ‘try’ t o ra ngo i l có lo i e1, thì th c ế ạ ệ
hi n //x lý ngo i l n u không chuy n xu ng kh i 'catch' ti p theo ệ ế ế
}
catch(Exception e2)
{
// N u các l nh trong kh i ‘try’ t o ra ngo i l có lo i e2, thì th c ế ạ ệ
hi n //x lý ngo i l n u không chuy n xu ng kh i 'catch' ti p theo ệ ế ế
}
catch(Exception eN)
{
// N u các l nh trong kh i ‘try’ t o ra ngo i l có lo i eN, thì th c ế ạ ệ
hi n //x lý ngo i l n u không chuy n xu ng kh i 'catch' ti p theo ệ ế ế
}
finally
{
// kh i l nh nay luôn đ c th c hi n cho dù ngo i l có x y ra hay ố ệ ượ ạ ệ
không.
}
Các u đi m c a mô hình ‘catch và throw’ư ể ủ
Mô hình ‘catch và throw’ có hai u đi m:ư ể
Ng i l p trình ch ph i x lý ngo i l khi c n thi t. Không c n ườ ậ ạ ệ ế
ph i th c hi n t i m i m c.ả ự ạ ọ ứ
Thông báo l i có th đ c hi n ra khi ti n hành x lý ngo i l . ể ượ ế
Các kh i ‘try’ và ‘catch’
Kh i ‘try-catch’ đ c s d ng đ thi hành mô hình ‘catch và throw’ c a ượ ử ụ
vi c x lý ngo i l . Kh i ‘try’ ch a m t t p l nh có th thi hành đ c. ạ ệ ộ ậ ượ
Các ngo i l có th b ch n khi thi hành t p l nh này. Ph ng th c có kh ể ị ươ
năng t o ra 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 m t kh i ‘try’. Các kh i ‘catch’ này b t các ộ ố
ngo i l có kh năng t o ra trong trong kh i ‘try’. Hãy xem kh i ‘try’ d i ạ ệ ướ
đây:
try
{
doFileProcessing(); // ph ng th c do ng i s d ng đ nh nghĩaươ ườ ử ụ
displayResults();
}
catch (Exeption e) // th hi n c a ngo i l ạ ệ
{
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 này đ in các chi ti t v ngo i l . Các ph ng th c ‘ượ ế ạ ệ ươ toString
printStackTrace đ c s d ng đ mô t các ngo i l x y ra. Hình sau ượ ử ụ ệ ả
ch ra k t xu t c a ph ng th c ‘ ế ấ ủ ươ printStackTrace()’.
Kh i Try và Catch
Đ x lý đ c ngo i l nào, ta ph i ch ra ki u ngo i l t ng ng. ượ ạ ệ ạ ệ ươ
catch(Exception e)
Khi ngo i l không bi t thu c ki u nào, chúng ta có th s d ng l p ế ể ử
‘Exception’ đ b t ngo i l đó.ể ắ
Kh i ‘catch() b t gi b t c các l i x y ra trong khi thi hành ph ng th c ữ ấ ươ
doFileProcessing’ hay ‘display’. N u m t l i x y ra trong khi thi hành ế ộ ỗ
ph ng th c ‘ươ doFileProcessing()’, lúc đó ph ng th cươ displayResults()
s không bao gi đ c g i. Ch ng trình s chuy n đ n 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 ( ố ượ ạ ệ Exceptione), l i th c t có th là m t đ i ự ế
t ng thu c l p 'ượ 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 g p catch c a nó,
n u không tìm th y ch ng trình ph i d ng th c hi n và thoát.ế ươ ả ừ
Các kh i ch a nhi u Catchố ứ
Nhi u kh i ‘catch’ x lý các lo i 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();
displayResults(); }
catch(LookupException e) // e – LookupException object
{
handleLookupException(e); // ph ng th c x lý l i do ng i s d ng ươ ườ ử ụ
//đ nh nghĩa
}
catch(Exception e)
{
System.err.println(“Error:” + e.printStackTrace());
}
}
Trong tr ng h p này, 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. d đo n ươ ể ứ
mã d i đây:ướ
try
{
statement 1;
statement 2;
try
{
statement1;
thông tin tài liệu
Tài liệu hướng dẫn cách nhanh nhất để xử lý hướng ngoại lệ trong quá trình lập trình java
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×