Professional Documents
Culture Documents
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
X l li v ngoi l
Trong mt s ngn ng nh C, vic x l li
thng c ci t ngay ti cc bc thc
hin ca chng trnh. Cc hm s tr v mt
cu trc li khi gp li.
V d: Tm kim phn t trong mt danh sch
X l li v ngoi l
M lnh v m x l li nm xen k khin
lp trnh vin kh theo di c thut ton
chnh ca chng trnh.
Khi mt li xy ra ti hm A, tt c cc li
gi hm lng nhau n A u phi x l li
m A tr v.
X l li v ngoi l
Trong Java, vic x l li c th c ci t
trong mt nhnh c lp vi nhnh chnh ca
chng 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,
ng vi thit k thut ton.
4
V d 1
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 = new Point[10];
for(int i = 0; i < pts.length; i++) {
pts[i].x = i;
pts[i].y = i+1;
}
}
}
5
Kt qu thc thi v d 1
Goi phuong thuc methodeX()
Exception in thread "main" java.lang.NullPointerException
at MyArray.methodeX(MyArray.java:14)
at MyArray.main(MyArray.java:7)
V d 2
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;
}
}
7
Kt qu thc thi v d 2
Goi phuong thuc A()
Exception in thread "main" java.lang.ArithmeticException: / by zero
at
at
at
at
MyDivision.C(MyDivision.java:14)
MyDivision.B(MyDivision.java:11)
MyDivision.A(MyDivision.java:8)
MyDivision.main(MyDivision.java:4)
Ngoi l
Khi mt phng thc gp li no ,
v d nh chia khng, vt kch thc
mng, m file cha tn ti th cc
ngoi l s c nm ra. Chng trnh
dng li ngay lp tc, ton b phn
m pha sau s khng c thc thi.
Java h tr cch thc x l ngoi l
(exception handling) tu theo nhu cu
ca chng trnh.
9
X l ngoi l
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 cu
lnh trong khi catch s c thc hin
tu vo kiu ca ngoi l.
Sau khi thc hin xong khi catch, iu
khin s c tr li cho chng trnh.
10
Khi try/catch
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);
11
Khi try/catch
V d 2:
try {
A();
} catch (Exception e) {
System.out.println(Co loi trong A());
}
V d 3:
try {
x = System.in.read();
System.out.println(x = + x);
} catch (IOException e) {
System.out.println(Error: + e.getMessage());
}
12
Khi try/catch
V d 4:
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());
}
13
Khi finally
Khi mt ngoi l xy ra, chng trnh dng
li, mt s cng vic dn dp c th s
khng c 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
xy ra.
try
{
doSomething(); // phng thc ny c th gy ra ngoi l
} finally {
cleanup();
}
14
Tm tt v x l ngoi l
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 trnh
s 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 thc
hin, dng khi finally. C th kt hp
try/catch/finally.
15
Mt s lp ngoi l
Object
Throwable
Error
Exception
ArithmeticException
16
Mt s lp ngoi l
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 l s.
String getMessage(); // Ly thng tin v
ngoi l
void printStackTrace(); // In ra tt c cc
thng tin lin quan n ngoi l
17
Mt s lp ngoi l
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.
18
Mt s lp ngoi l
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 chia
khng
ClassCastException: li p kiu
ArrayIndexOutOfBoundsException: vt
qu ch s mng
...
19
Ngoi l checked
L cc ngoi l bt buc phi c kim
tra.
Gm cc ngoi l cn li.
20
Ch vi ngoi l checked
Gi s method1 gi method2 v
method2 l phng thc c kh nng
nm ngoi l kiu checked, lc :
hoc method2 phi nm trong khi
try/catch.
hoc phi khai bo method1 c kh nng
nm (throws) ngoi l.
21
V d: Ngoi l IOException
Cch 1: try/catch
public static void main(String[] args)
{
try {
String s = buff.readLine();
} catch (IOException e) {
...
}
}
String s = buff.readLine();
}
22
Bi tp ti lp
Bi 1: Ci t x l cc ngoi l cho
chng trnh tnh thng 2 s bng
giao din GUI.
Bi 2: Ci t x l li bng cch dng
ngoi l cho v d phn u bi.
23
24
// file ExampleException.java
public class ExampleException
{
public void copy(String fileName1, String fileName2)
throws MyException
{
if (fileName1.equals(fileName2))
throw new MyException("File trung ten"); // tung ngoi l
}
System.out.println("Copy completed");
Tung ngoi l
25
26
27
B()
B()
A()
A()
main()
main()
Nm li ngoi l
Trong khi catch, ta c th khng x l
trc tip ngoi l m li nm li ngoi l
cho ni khc x l.
catch (IOException e) {
throw e;
Bi tp
1. Vit chng trnh cho php tnh gi tr ca
biu thc:
5x - y
A=
2x + 7y
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. Ci
t cc x l ngoi l cn thit.
31
Bi tp
3. Xy dng lp ngoi l DateException cho
cc li v ngy thng.
4. Vit chng trnh cho php ngi dng nhp
vo ngy, thng nm, nu thng tin ny
khng hp l s tung ra mt ngoi l
DateException, sau thng bo cho ngi
nhp bit v cho php ngi dng nhp li.
32
Bi tp
5. Tm hiu li lp Candidate hc (d liu
gm m th sinh, tn v im thi 3 mn).
iu g s xy ra khi to mt i tng
thuc lp Candidate vi d liu a vo
khng hp l ? Ci t lp
CandidateException bt cc li nh trn.
Yu cu khi c li th s cho bit c tn v
m th sinh b li.
33