You are on page 1of 34

Chng 4: Exceptions

GVLT: Trn Anh Dng

Ni dung
Gii thiu. Cch x l li truyn thng. X l ngoi l (Exception) trong java u im ca nm bt ngoi l Mt s lp ngoi l Kim sot ngoi l Ngoi l do ngi dng to Lan truyn ngoi l

Gii thiu
Mi on chng trnh u tim n kh nng sinh li Li ch quan: do lp trnh sai Li khch quan: do d liu, do trng thi ca h thng Li c 2 loi. ? Ngoi l (Exception): cc trng hp hot ng khng bnh thng

Cch x l li truyn thng


Ci t m x l ti ni pht sinh ra li Lm cho chng trnh tr nn kh hiu Khng phi lc no cng y thng tin x l Khng nht thit phi x l Truyn trng thi ln mc trn Thng qua tham s, gi tr tr li hoc bin tng th (flag) D nhm Kh hiu
4

V d (1)
IF B IS ZERO GO TO ERROR C = A/B PRINT C GO TO EXIT ERROR: DISPLAY DIVISION BY ZERO EXIT: END
5

Block that handles error

V d (2)
int devide(int num, int denom, int& error) { if (0 != denom){ error = 0; return num/denom; } else { error = 1; return 0; } }
6

Cch x l li truyn thng


Kh kim sot c ht cc trng hp Li s hc Li b nh Lp trnh vin thng qun khng x l li Bn cht con ngi Thiu kinh nghim, c tnh b qua

X l ngoi l trong java


Java l ngn ng mnh, c ngha l ti thiu ha c li v khi c li th chng c th c qun l. Ngoi l: l i tng mang thng tin v li xy ra Ngoi l c nm t ng Ngoi l c nm tng minh Da trn c ch nm (throw) v bt (catch) ngoi l Nm ngoi l: dng chng trnh v chuyn iu khin ln mc trn (ni bt ngoi l) Bt ngoi l: x l vi ngoi l

u im ca nm bt ngoi l
D s dng D dng chuyn iu khin n ni c kh nng x l ngoi l C th nm nhiu loi ngoi l Tch x l ngoi l khi thut ton Tch m x l S dng c php khc Khng b st ngoi l (nm t ng) Chng trnh d c hn, an ton hn
9

Hierarchy of Exception Classes

10

Mt s lp ngoi l (1)
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

11

Mt s lp ngoi l (2)
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

12

Mt s lp ngoi l (3)
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: li vt qu ch s mng ...

13

Cc loi ngoi l
Java phn bit hai loi ngoi l l ngoi l cn kim tra v ngoi l khng cn kim tra Ngoi l unchecked L cc ngoi l khng bt buc phi kim tra. Gm RuntimeException, Error v cc lp con ca chng. Ngoi l checked L cc ngoi l bt buc phi c kim tra. Gm cc ngoi l cn li.

14

Kim sot ngoi l (1)


on code c th sinh ra li cn t trong khi lnh bt u bng try. on code kim tra, x l trong trng hp c li xy ra t trong khi lnh catch. try { // on m c th sinh ra li } catch (<Ki u Exception>){ // on m kim sot li }
15

Kim sot ngoi l (2)


Khi lnh t trong finally lun c thc thi cho d c Exception hay khng. Thng dng gii phng ti nguyn try { // on m c th sinh ra li } catch (<Ki u Exception>) {// on m kim sot li } finally { //on m lun lun c thc thi }
16

Kim sot ngoi l (3)


try { // Khi lnh trc dng lnh sinh ra li // Dng lnh sinh ra li (Exception) // } Khi lnh sau dng lnh catch (<Ki u Exception>){ sinh ra li s b b qua // on m kim sot li v khng thc hin khi c exception } finally { // }
17

Kim sot ngoi l - V d (1)


V d 1: try { int x = 10; int y = 0; float z = x/y; System.out.print("Ket qua la:" + z); } catch(ArithmeticException e) { System.out.println(Loi tinh toan so hoc) }
18

Kim sot ngoi l - V d (2)


V d 2: void docfile(String filename) throws IOException{ FileInputStream fin = new FileInputStream(filename); }

19

Kim sot ngoi l - V d (3)


Hoc void docfile(String filename) { try { FileInputStream fin = new FileInputStream(filename); } catch (IOException e) { System.out.println(Loi doc file); } }

20

Kim sot ngoi l - V d (4)


import java.io.*; public class MainClass { public static void main(String[] args) { try { int num_1, num_2; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); System.out.print("\n Nhap so thu 1:"); num_1 = Integer.parseInt(in.readLine()); System.out.print("\n Nhap so thu 2:"); num_2 = Integer.parseInt(in.readLine()); float rs = (float)num_1/num_2; System.out.print("\n Ket qua:" + rs); }
21

Kim sot ngoi l - V d (4)


catch (ArithmeticException e) { System.out.print("Loi chia cho 0"); } catch (IOException e) { System.out.print("Loi xuat nhap"); } catch (Exception e) { System.out.print("Loi khac"); } System.out.print(Kiem soat duoc loi hay Khong co loi"); } }
22

Nm ngoi l
Khi c li phng thc s nm ra mt exception Vic kim sot exception gip chng trnh kim sot c nhng trng hp ngoi l v x l li. Dng t kha throws ch nh nhng loi exception m phng thc c th nm ra. <tin t> <tn phng thc>(<i s>) throws <cc exceptions>

23

Nm 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; } Ch : Trong trng hp trn, phng thc cha catch phi bt ngoi l hoc khai bo throws cho ngoi l (nu l loi checked).

24

Nm ngoi l khi phng thc


Khng nht thit phi x l ngoi l trong phng thc Khng thng tin x l Khng thm quyn Mt phng thc mun nm ngoi l ra ngoi phi khai bo vic nm ngoi l bng t kha throws C th nm ngoi l thuc lp dn xut ca ngoi l c khai bo

25

Ngoi l do ngi dng to (1)


nh ngha lp ngoi l // file MyException.java public class MyException extends Exception { public MyException(String msg) { super(msg); } }

26

Ngoi l do ngi dng to (2)


S dng ngoi l

Khai bo kh nng nm ngoi l

// file ExampleException.java public class ExampleException { public void copy(String fileName1, String fileName2) throws MyException { if (fileName1.equals(fileName2)) // tung ngoi l throw new MyException("File trung ten"); System.out.println("Copy completed"); }
Nm ngoi l
27

Ngoi l do ngi dng to (3)


S dng ngoi l
public 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()); } }
28

Ngoi l do ngi dng to (4)


import java.io.*; // ArrayCatch.java class MyException extends ArrayIndexOutOfBoundsException{ MyException(){ super("\nChi so nam ngoai pham vi cua mang"); } } class ArrayCatch{ int a[]= { 1,2,3,4,5}; int n=5; public static void main(String args[]){ ArrayCatch Obj= new ArrayCatch(); Obj.OutElement(7); } void OutElement(int i) throws MyException{ if (i<0 || i>=n) throw new MyException(); else System.out.println (a[i]); } }
29

Lan truyn ngoi l


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.
C() B() A() main()

C() tung ngoi l


B() A() main()

30

Tha k v vn bt ngoi l
try{ // } catch (EOFException e){ // } catch (IOException e){ // } try{ // } catch (IOException e){ // } catch (EOFException e){ // }

ng

Sai

31

Bi tp
1. Vit chng trnh cho php tnh gi tr ca biu thc: A =
5x - y

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.

32

Bi tp
3. 4. Xy dng lp ngoi l DateException cho cc li v ngy thng. 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.

33

Hi & p

34

You might also like