2.3 Qu n lý l

i và gom rác

1

M c tiêu

c exception là gì.

ượ

c các exception c cú pháp

• Đ nh nghĩa đ • Phân lo i đ • S d ng đ ử ụ

ạ ượ ượ

try..catch..finally t cách t qu n lý exception ả ự c c ch gom rác i thích đ ế ượ ơ

ế ả c a Java

• Bi • Gi ủ

2

N i dung

i c a Java

ỗ ủ

1- Exception là gì? 2- C u trúc qu n lý l 3- Mô hình try catch finally 4- S d ng throws ử ụ 5- T đ nh nghĩa exceptions ự ị 6- C ch gom rác ế ơ t-tr c nghi m-bài t p 7- Tóm t ệ ắ ắ

3

1- Exception là gì?

i ố

i thì chúng i và khi có l ỗ

ị ỗ

ỗ ự

i thu t sai, không d đoán ậ i lúc th c thi (run- ự

c tình hu ng). ượ i cú pháp), l ả ố

ụ ự ố ệ ẫ

4

ng trình k t ế i c tr l ả ạ c các tình ượ ượ ề ả ả

Java là ngôn ng m nh, có nghĩa là t ữ ạ c l thi u hóa đ ượ ỗ ể c qu n lý. có th đ ả ể ượ L i có 2 lo i: L i lúc biên d ch (compile- ỗ ạ time error-l ỗ time error- gi đ Exception= runtime-error Thí d : th c hi n phép chia mà m u s là 0 Khi 1 exception x y ra, ch ươ thúc đ t ng t và đi u khi n đ ể ộ cho OS  C n ph i qu n lý đ ầ hu ng này. ố

i c a

ỗ ủ

2- C u trúc các class qu n lý l ấ Java

Tham kh o JavaHelp ả

Object

Throwable

Error

Exception

AWTError

SQLException

RuntimeException

ThreadDead

ClassNotFoundException

ArithmaticException

NullPointerException

NumberFormatException

Khi 1 error/exception x y ra, ta nói r ng nó b “thrown” (throw)

5

C u trúc các class qu n lý l

i c a

ỗ ủ

ề ớ

ấ ủ

i tóan h c nh ư ọ

ng

ố ượ

ở ạ

ư

c quy n truy ề

ượ

ể ạ

ớ 6

Java(tt) Exception: l p n n c a phân c p exception. ủ RuntimeException: L p n n c a nhi u l p trong ớ java.lang.exceptions. ArithmaticException: Qu n lý l chia cho 0. IllegalArgumentException : L i sai đ i s . ố ố ArrayIndexOutOfBoundsException: L i sai ch s ỉ ố ỗ c a m ng NullPointerException: L i đã truy xu t 1 đ i t ch a kh i t o SecurityException : L i không đ c p.ậ ClassNotFoundException: L i không th n p 1 l p vì không có l p này

C u trúc các class qu n lý l

i c a

ỗ ủ

i tóan h c nh chia

ặ ả

ấ ữ ệ

ỗ ố

ấ ế

Java(tt) NumberFormatException: L i chuy n String ->float. AWTException: L i Abstract Windowing Toolkit ArithmaticException: Qu n lý l ư cho 0. IOException : L p n n c a IO exception. ủ ề FileNotFoundException: L i không có file đã đ c t EOFException: L i c truy xu t d li u mà file đã h tế IllegalAccessException : L i truy xu t đ n 1class b ị ỗ c m.ấ NoSuchMethodException: L i không có method đã đ c tặ ả InterruptedException: lu ng b ng t ắ

7

3- Mô hình try catch finally

ể ử ự

ẫ ỗ catch) đ x lý i và cu i cùng th c thi ti p

ụ try), n u ế ể ử ự

i ( ố

ế

Có th th th c thi 1 tác v ( i thì b y l xu t 1 l ỗ ấ tình hu ng l ỗ ố (finally). Cú pháp

( Không có các c p {}

ặ  L i: ‘{‘

try block

expected )

no

e?

catch block

finally block

8

try {….} catch (Exception e) { …} finally { …} …

Mô hình try catch finally(tt) import java.io.*; // TryCatchDemo.java class TryCatchDemo { static double Divide ( double a, double b) { return

a/b;}

public static void main(String args[]) { try { System.out.println(Divide(5,0));} catch( Exception e) { System.out.println("System exception:"+

e.toString());}

Infinity

I tried to divide 5 by 0

End!

finally { System.out.println("I tried to divide 5 by 0");} System.out.println("End!"); } }

9

import java.io.*; // ArrayCatch.java class ArrayCatch { static String S; static void Out() { System.out.println(S);} public static void main(String args[]) { try { Out(); } catch (NullPointerException e) { System.out.println("Exception occured:");} finally { int a[]= { 1,2,3,4,5}; try { System.out.println(a[7]);}

catch(ArrayIndexOutOfBoundsException e2)

{ System.err.println("Out of

null

bounds");} }

Out of bounds

10

} }

4- S d ng throw

ử ụ

ấ ủ ớ Throwable.

i

ơ

Tóan t ử throw cho phép ch th 1 exception ị ỉ đã x y ra. K t q a là 1 đ i t ng c a 1 l p ố ượ ế ủ ẩ d n xu t c a l p Tình hu ng:ố method X() g i method Y(), Y() th c thi gây ra 1 exception mà không đ c ự ượ ng qu n lý, exception này lan v cho ph ả ươ th c g i là X() . N u trong X() cũng không ứ ế ọ ỗ  L i truy n v cho n i đã g i qu n lý l ọ ề ả X() Cách gi

i quy t:

ế

i;

a) Trong Y() có qu n lý l b) Trong X() có có c u trúc try…catch đ ể ấ

11

qu n lý l

i.

S d ng throw/throws ...

ử ụ

Cú pháp sinh 1 Exception trong hàm

ReturnType Method (…) throws ExceptionClass { if (…) throw ExceptionClass(“Message”); else { …… } }

12

Ví d v lan truy n exception

ụ ề

c c a m ng:

Kích th 5

l ỗ

ả ướ ủ i truy n lên ề

Ch s truy xu t: 7

ỉ ố

import java.io.*; // ArrayCatch.java 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) { System.out.println (a[i]); } } Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException 

at ArrayCatch.OutElement(ArrayCatch.java:10)

at ArrayCatch.main(ArrayCatch.java:7)

13

Cách s a 1- Try catch b y l i trong main(…) ẫ ỗ ử

Illegal index

Press any key…

B y l

i ẫ ỗ

import java.io.*; // ArrayCatch.java class ArrayCatch { int a[]= { 1,2,3,4,5}; int n=5; public static void main(String args[]) { ArrayCatch Obj= new ArrayCatch(); try { Obj.OutElement(7);} catch (ArrayIndexOutOfBoundsException e) { System.out.println("Illegal index");} } void OutElement(int i) { System.out.println (a[i]);

14

}

}

i trong ẫ ỗ

Cách s a 2- Try catch b y l ử OutElement(…)

b y l

Khai báo có i ẫ ỗ

Phát sinh 1 đ i ố t ng Exception ượ trong phân c pấ

N i dung thông báo l

ch n

import java.io.*; // ArrayCatch.java 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 ArrayIndexOutOfBoundsException { if (i<0 || i>=n) throw new ArrayIndexOutOfBoundsException ("\nIndex is out of array"); else System.out.println (a[i]); } }

15

i t ỗ ự ọ ộ thay cho thông báo h th ng ệ ố

Try catch b y l i trong OutElement(…) - tt ẫ ỗ

K t q a: ế ủ

Exception in thread "main"

java.lang.ArrayIndexOutOfBoundsException:

Index is out of array at ArrayCatch.OutElement(ArrayCatch.java:9) at ArrayCatch.main(ArrayCatch.java:6)

16

5- T đ nh nghĩa exceptions

ự ị

User-defined Exception: T o ra 1 l p con c a các l p ạ Error ho c Exception

import java.io.*; // ArrayCatch.java class MyException extends

ArrayIndexOutOfBoundsException

17

{ MyException() { super("\nIndex is out of array");}} class ArrayCatch { int a[]= { 1,2,3,4,5}; int n=5; public static void main(String args[]) { ArrayCatch Obj= newArrayCatch();Obj.OutElement(7);} void OutElement(int i) throws MyException { if (i<0 || i>=n) throw new MyException(); else System.out.println (a[i]); } }

6- C ch gom rác ế

ơ

ỏ ủ ể ủ ế ự ộ

đ ng c a Java đ h y b các ữ

i ch ng ộ ằ ng không còn dùng n a. ự ươ ạ

ủ ằ ọ

ệ ả

c th c thi ngay l p t c. ả ậ ứ ự

Là c ch t ơ đ i t ố ượ Hi n th c b ng heap đ ng (xem l ệ 1). Dù có th công g i trình gom rác b ng System.gc() cũng không b o đ m vi c gom rác đ ượ Có th th công t ể ủ t trình gom rác b ng ch th ị ắ ằ ỉ

ể ộ ớ

java –noasyncgc File.class nh ng có th ph i tr giá là thi u b nh do ng trình khó ế ươ

18

ng trình kém. ư s đ i t ố ố ượ tiên li u ệ  Hi u su t ch ả ả ng sinh ra trong ch ấ ươ ệ

C ch gom rác- finalize() method

ơ

ế

ng th c

ươ

ứ finalize()

ư

ọ ủ ề

ng m i b gom rác ớ ị ng không b ị ố ượ

Java cung c p ph h at đ ng nh 1 Destructor c a C++ đ ể ủ h y các quá trình tr c khi qúa trình tr ướ ả đi u khi n v cho h đi u hành. ệ ề ể Chú ý: Ch có đ i t ố ượ ỉ ch tham kh o đ n đ i t ế ả ứ gom. Cú pháp:

protected void finalize() throws

Throwable

19

Ví dụ:

Object a= new Object(); Object b=a; a=null; a, b là các references c a 1 đ i t a=null, nghĩ r ng đ i t ằ

ủ ố ượ ẫ ng. ố ựơ ng không còn ế ả

dùng n a ữ  Sai vì b v n tham kh o đ n nó

ng này bây gi là rác ố ượ ờ

Object c= new Object(); c=null ; // đ i t Object d= new Object(); d=new Object();

ng ố ượ c đó là rác

T i lúc này, đ i t ạ v a t o tr ừ ạ

ứơ

20

Ví d :ụ

21

ng trình trên

ươ

Trong ch ớ

ả ệ ố

h th ng lúc th c thi ở ạ

ng RunTime

L p RunTime mô t Dùng hành vi static getRunTime đ kh i t o 1 đ i ố t ượ

22

M t s methods c a l p Runtime ủ ớ ộ ố

Methodes c a l p RunTime ủ ớ

23

7- Tóm t

ắ ắ

t-tr c nghi m-bài t p ệ

i: L i lúc biên d ch và l

i khi th c thi. ự

ỗ i ………………………

ỗ ỗ

ị ự

1. 2. 3. 4.

ỗ ỗ ế

ắ ộ

ươ

ng trình s ng t đ t ng t ộ c tr v cho ……………………………………..

ả ề ượ

c các …………………………….. i đúng lúv (true/false) i : …………………………………..

c dùng đ b y l

ả khóa đ ừ

ử ể ẫ ỗ

ượ

5. 6. 7. 8.

ố ớ

ể ử

Có hai l ai l ọ L i biên d ch là l L i lúc th c thi còn g i là ……………….. N u không qu n lý Exception, ch ả và đi u khi n đ ượ ể Hòan tòan có th b y đ ể ẫ Qu n lý exception cho phép x lý l 5 t T khóa throws cho phép dùng đ i v i các exception mà 1 ừ hàm có th x lý (true/false) T khóa throw ch th r ng 1 exception đã x y ra (true/false)

9. ị ằ 10. T khóa finally ch th n i b t đ u 1 kh i phát bi u không ị ơ ắ ầ

ừ ừ

i có x y ra hay không (true./false)

ỉ ỉ ỗ

t o ra 1 Exception class (true/false)

ụ 11. Ta có th t 12. System.gc() s yêu c u h th ng …………………………..

ph thu c vào 1 l ộ ể ự ạ ẽ

ệ ố

24

Bài t pậ

t ch 1- Vi ng trình ch y b ng đ i s dòng l nh ằ ạ

ố ế ộ ố ố ươ

thì báo l ệ ng trình là i “Không ỗ ậ ự

t ch ả ố

. ấ

i ch ề ạ

ươ

25

ươ bu c nh p các tham s cho ch ậ các ký s . N u nh p ký t ế ố nh p ký t ” ự L u ý: Cú pháp java file.class arg1, arg2, … ư ng trình nh p vào 1 m ng s int, 2- Vi ươ ế ậ nh p 1 v trí i, xu t ph n t th i n u i h p l ị ậ ế ầ ử ứ ợ ệ i xu t thông báo “Ngòai t m ph Ng c l ượ ạ ủ ầ ấ ng 2 v nh p s int, sóng”. G i ý: xem l ậ ố ươ ợ ng này v Exception ng v i xem trong ch ớ ứ ề tình hu ng ngòai t m ph sóng:” này. ủ ầ ố