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. ủ ầ ố