8/3/2019 Bai7 Exception
1/35
GING VIN:V TN DNG
TRNG CAO NG CNG NGH THNG TIN TP.HCM
NHP MN JAVA
BI 7X L NGOI L(EXCEPTION)
GV:VT
nDng
8/3/2019 Bai7 Exception
2/35
2
X l li v ngoi l Khi try/catch/finally
Cc lp ngoi l
Xy dng lp ngoi l
Lan truyn ngoi l
Tung li ngoi l Bi tp
NI DUNG TRNH BY
8/3/2019 Bai7 Exception
3/35
3
Trong mt s ngn ng nh C, vic x l lithng c ci t ngay ti cc bc thc hinca chng trnh. Cc hm s tr v mt cutrc li khi gp li.
V d: Tm kim phn t trong mt danh schErrorStruct error = new ErrorStruct();
TableEntry entry = lookup(Marianna, employee, error);
if (entry == null){
return error;
}
X L LI V NGOI L
8/3/2019 Bai7 Exception
4/35
4
M lnh v m x l li nm xen k khin lptrnh vin kh theo di c thut ton chnhca chng trnh.
Khi mt li xy ra ti hm A, tt c cc li gihm lng nhau n A u phi x l li m Atr v.
X L LI V NGOI L
8/3/2019 Bai7 Exception
5/35
5
Trong Java, vic x l li c th c ci ttrong mt nhnh c lp vi nhnh chnh cachng trnh.
Li c coi nh nhng trng hp ngoi l(exceptional conditions). Chng c bt/nm(catch and throw) khi c li xy ra.
=> Mt trng hp li s ch c x l ti ni
cn x l.=> M chnh ca chng trnh sng sa, ngvi thit k thut ton.
X L LI V NGOI L
8/3/2019 Bai7 Exception
6/35
6
import java.awt.Point;
public class MyArray{
public static void main(String[ ] args) {System.out.println("Goi phuong thuc methodeX()");methodeX();System.out.println("Chuong trinh ket thuc binh thuong");
}
public static void methodeX() {Point[ ] pts = newPoint[10];for(int i = 0; i < pts.length; i++) {
pts[i].x = i;pts[i].y = i+1;}
}}
V D 1
8/3/2019 Bai7 Exception
7/35
7
Goi phuong thuc methodeX()Exception in thread "main" java.lang.NullPointerException
at MyArray.methodeX(MyArray.java:14)at MyArray.main(MyArray.java:7)
Gii thch: H thng tung ra mt exception thuc lpNullPointerExceptionkhi gp li. Sau chng trnh ktthc.
KT QU THC THI V D 1
8/3/2019 Bai7 Exception
8/35
8
public class MyDivision {
public static void main(String[ ] args) {System.out.println("Goi phuong thuc A()");A();System.out.println("Chuong trinh ket thuc binh thuong");
}
public static void A() {B();
}public static void B() {
C();
}public static void C() {float a = 2/0;
}}
V D 2
8/3/2019 Bai7 Exception
9/35
9
Goi phuong thuc A()Exception in thread "main" java.lang.ArithmeticException: / by zero
at MyDivision.C(MyDivision.java:14)at MyDivision.B(MyDivision.java:11)at MyDivision.A(MyDivision.java:8)
at MyDivision.main(MyDivision.java:4)
Gii thch: Phng thc A() gi B(), B() gi C(), C() gy ra lichia cho 0 v h thng nm ra mt exception thuc lp
ArithmeticException. Sau chng trnh kt thc.
KT QU THC THI V D 2
8/3/2019 Bai7 Exception
10/35
10
Khi mt phng thc gp li no , v dnh chia khng, vt kch thc mng,m file cha tn ti th cc ngoi l sc nm ra. Chng trnh dng li ngaylp tc, ton b phn m pha sau skhng c thc thi.
Java h tr cch thc x l ngoi l
(exception handling) tu theo nhu cu cachng trnh.
NGOI L
8/3/2019 Bai7 Exception
11/35
11
Khi try/catch t on m c kh nng xy ra ngoi l
trong khi try
t on m x l ngoi l trong khi catch Khi xy ra ngoi l trong khi try, cc culnh trong khi catch s c thc hin tuvo kiu ca ngoi l.
Sau khi thc hin xong khi catch, iukhin s c tr li cho chng trnh.
X L NGOI L
8/3/2019 Bai7 Exception
12/35
12
V d 1:try{
methodeX();System.out.println(Cau lenh ngay sau methodX());
}catch (NullPointerException e){
System.out.println(Co loi trong khoi try);}System.out.println(Cau lenh sau try/catch);
KHI TRY/CATCH
8/3/2019 Bai7 Exception
13/35
13
try {
x = System.in.read();System.out.println(x = + x);} catch (IOException e) {
System.out.println(Error: + e.getMessage());}
try {A();
} catch (Exception e) {System.out.println(Co loi trong A());
}
V d 2:
V d 3:
KHI TRY/CATCH
8/3/2019 Bai7 Exception
14/35
14
try{
String s = buff.readLine();int a = Integer.parseInt(s);x[i++] = a;
} catch (IOException e) {System.out.println(Error IO: + e.getMessage());
} catch (NumberFormatException e) {System.out.println(Error Format: + e.getMessage());
} catch (ArrayIndexOutOfBoundsException e) {System.out.println(Error Index: + e.getMessage());}
V d 4:
KHI TRY/CATCH
8/3/2019 Bai7 Exception
15/35
15
Khi mt ngoi l xy ra, chng trnh dng li,mt s cng vic dn dp c th s khngc thc hin (v d nh ng file).
Khi finally m bo rng cc cu lnh trong
lun c thc hin, k c khi ngoi l xyra.try{
doSomething(); // phng thc ny c th gy ra ngoi l} finally {
cleanup();}
KHI FINALLY
8/3/2019 Bai7 Exception
16/35
16
Cc ngoi l xy ra khi gp li. C th bt v x l cc ngoi l bng cch s
dng khi try/catch. Nu khng chng trnhs kt thc ngay (vi ng dng console) hoc
tip tc tn ti (vi ng dng GUI). Khi bt ngoi l, phi bit r kiu ngoi l cn
bt. C th dng kiu cha Exception.
chc chn vic dn dp lun c thchin, dng khi finally. C th kt hptry/catch/finally.
TM TT V X L NGOI L
8/3/2019 Bai7 Exception
17/35
17
ClassNotFoundException
Throwable
Error Exception
RuntimeExceptionAssertionError IOException
Object
NullPointerException ArithmeticException
MT S LP NGOI L
8/3/2019 Bai7 Exception
18/35
18
Lp Throwable C mt bin String lu thng tin chi tit v
ngoi l xy ra
Mt s phng thc c bn Throwable(String s); // To mt ngoi l c tn ls.
String getMessage(); // Ly thng tin v ngoi l
void printStackTrace(); // In ra tt c cc thng tinlin quan n ngoi l
MT S LP NGOI L
8/3/2019 Bai7 Exception
19/35
19
Lp Exception C nhiu ngoi l thuc lp con ca
Exception.
Ngi dng c th to ra cc ngoi l k
tha t Exception. Lp Error
Ch nhng li nghim trng v khng d
on trc c nh ThreadDead,LinkageError, VirtualMachineError...
Cc ngoi l kiu Error t c x l.
MT S LP NGOI L
8/3/2019 Bai7 Exception
20/35
20
RuntimeException: Ch cc ngoi l c th
xy ra khi JVM thc thi chng trnh NullPointException: con tr null
OutOfMemoryException: ht b nh
ArithmeticException: li ton hc, li chiakhng
ClassCastException: li p kiu
ArrayIndexOutOfBoundsException: vt quch s mng
...
MT S LP NGOI L
8/3/2019 Bai7 Exception
21/35
21
Ngoi l unchecked L cc ngoi l khng bt buc phi ckim tra.
Gm RuntimeException, Error v cc lp conca chng.
Ngoi l checked L cc ngoi l bt buc phi c kim tra.
Gm cc ngoi l cn li.
HAI LOI NGOI L
8/3/2019 Bai7 Exception
22/35
22
Gi s method1 gi method2 v method2l phng thc c kh nng nm ngoi lkiu checked, lc : hoc method2 phi nm trong khi try/catch.
hoc phi khai bo method1 c kh nngnm (throws) ngoi l.
CH VI NGOI L CHECKED
8/3/2019 Bai7 Exception
23/35
23
Cch 1: try/catchpublic static void main(String[] args){
try {String s = buff.readLine();
} catch (IOException e) {...
}
}
Cch 2: Khai bo throwspublic static void main(String[ ] args) throwsIOException{
String s = buff.readLine();
}
V D (NGOI L IOException)
8/3/2019 Bai7 Exception
24/35
24
Bi 1: Ci t x l cc ngoi l chochng trnh tnh thng 2 s bng giaodin GUI.
Bi 2: Ci t x l li bng cch dngngoi l cho v d phn u bi.
Bi tp
8/3/2019 Bai7 Exception
25/35
25
nh ngha lp ngoi l// file MyException.java
public class MyException extendsException{
public MyException(String msg){
super(msg);}
}
NGOI L DO NGI DNG TO
8/3/2019 Bai7 Exception
26/35
26
S dng ngoi l// file ExampleException.javapublic class ExampleException{
public void copy(String fileName1, String fileName2)throws MyException
{if(fileName1.equals(fileName2))
throw newMyException("File trung ten"); // tung ngoi l
System.out.println("Copy completed");}
Khai bo kh nng tung ngoi l
Tung ngoi l
NGOI L DO NGI DNG TO
8/3/2019 Bai7 Exception
27/35
27
S dng ngoi lpublic static void main(String[] args){
ExampleException obj = new ExampleException();try {
String a = args[0];String b = args[1];obj.copy(a,b);
} catch (MyException e) {System.out.println(e.getMessage());
}}
}
NGOI L DO NGI DNG TO
8/3/2019 Bai7 Exception
28/35
28
Tnh hung Gi s trong main() gi phng thc A(),
trong A() gi B(), trong B() gi C(). Khi mt
ngn xp cc phng thc c to ra. Gi s trong C() xy ra ngoi l.
LAN TRUYN NGOI L
8/3/2019 Bai7 Exception
29/35
29
C()B()
A()
main()
B()
A()
main()
C() tung ngoi l
Nu C() gp li v tung ra ngoi l nhng trong C() li khng x lngoi l ny, thch cn mt ni c th x l chnh l ni m C() cgi, l trong phng thc B(). Nu trong B() cng khng x l th
phi x l ngoi l ny trong A()Qu trnh ny gi l lan truynngoi l.
Nu n main() cng khng x l ngoi l c tung t C() thchng trnh s phi dng li.
LAN TRUYN NGOI L
8/3/2019 Bai7 Exception
30/35
30
Trong khi catch, ta c th khng x l trc
tip ngoi l m li nm li ngoi l choni khc x l.
catch (IOException e) {throw e;
}
Ch : Trong trng hp trn, phng thccha catch phi bt ngoi l hoc khai bo
throws cho ngoi l (nu l loi checked).
NM LI NGOI L
8/3/2019 Bai7 Exception
31/35
31
Khng nn s dng ngoi l thay cho cclung iu khin trong chng trnh. V d: Kim tra delta trong chng trnh gii
phng trnh bc 2.
Nn thit k v s dng ngoi l mt cchthng nht cho ton b d n.
Mt s x l li bng ngoi l ph bin l: ht
b nh, vt qu ch s mng, con tr null,chia cho 0, i s khng hp l...
CH KHI S DNG NGOI L
8/3/2019 Bai7 Exception
32/35
32
1. Vit chng trnh cho php tnh gi tr ca biuthc:
A =
Yu cu x l cc ngoi l c th xy ra.
2. Vit chng trnh cho php to mt mng 2
chiu c mxn vi m,n nhp t bn phm. Cit cc x l ngoi l cn thit.
5x - y
2x + 7y
BI TP
BI TP
8/3/2019 Bai7 Exception
33/35
33
3. Xy dng lp ngoi l DateException cho ccli v ngy thng.
4. Vit chng trnh cho php ngi dng nhpvo ngy, thng nm, nu thng tin ny khnghp l s tung ra mt ngoi l DateException,sau thng bo cho ngi nhp bit v chophp ngi dng nhp li.
BI TP
BI TP 5
8/3/2019 Bai7 Exception
34/35
34
5. Tm hiu li lp Candidate hc (d liugm m th sinh, tn v im thi 3 mn). iug s xy ra khi to mt i tng thuc lpCandidate vi d liu a vo khng hp l ?
Ci t lp CandidateException bt cc linh trn. Yu cu khi c li th s cho bit ctn v m th sinh b li.
BI TP 5
8/3/2019 Bai7 Exception
35/35
HT
BI 7
V
TnDng