Chuyên đề Lập trình Java Chương 5 Biên soạn: Th.S Nguyễn văn Lành Introduction to Java 2/ Session / 1 of 16 Khai niém Error - Exception > Phan loai Y Error : các lỗi không bì
Trang 1
Chuyên đề Lập trình Java
Chương 5
Biên soạn: Th.S Nguyễn văn Lành
Introduction to Java 2/ Session / 1 of 16
Khai niém Error - Exception
> Phan loai
Y Error : các lỗi không bình thường, khó dự đoán, không
có khả năng phục hôi:
* hét bộ nhớ, lỗi hệ thống, môi trường
Exception: các tình huống có thẻ xảy ra làm ảnh
hưởng đên logic bình thường của chương trình
© [di logic, lỗi lập trình
> Các loại lỗi & ngoại lệ đều được biêu diễn bởi các lớp Error
& Exception ké thừa từ lớp java.lang Throwable
> Exception chia théng tin vẻ tỉnh huống lỗi, bao gồm kiều
lỗi, trạng thái của CT khi lỗi xảy ra
> Hệ thông JVM chịu trách nhiệm tìm kiếm mã chương
trình dành cho việc xử lý ngoại lệ
3 of 16
3:00 PM
Nội dung
> Khai niém Error & Exception
> Cau tric try — catch — finally
> Ménh dé throw & throws
> Dinh nghia lop Exception
> Exception va overriding
2 of 16 3:00 PM
Khai niém Error - Exception
> Cầu trúc phân cấp các lớp lỗi-ngoại lệ trong Java
Y Throwable: quang di duoc
4 of 16 3:00 PM
Trang 2
Exception
>» Phan loai Exception
¥ Runtime exceptions:
* 16i khi chạy CT, thường do viết mã chưa chuân
truy xuât vượt phạm vi mảng
« Có thể dự đoán tránh được khi viết mã nguồn
s RuntimException & các lớp con của nó
se không cần xử lý
vChecked exceptions
+ lỗi đã được kiểm tra dự báo
lôi nhập liệu, vào ra
¢ Exception va cac lớp con - ngoại trừ RuntimeException
s phải có mã xử lý: Sorte
tu khoa throw va throws
> các Exception được thực sự ném ra từ các hàm khi cần
thông báo cho đối tượng gọi hàm tình trạng lỗi
> dùng mệnh đẻ throw đề thực hiện ném ra Exception
if (balance<amount) throw new BankingException(“Out of money”);
> Phương thức chứa câu lệnh trên phải khai báo khả năng
lôi băng mệnh dé throws
public double withdraw(double amount) throws BankingException{
if (balance<amount) throw new BankingException(“No money”);
else balance-=amount;
return balance;
}
7 of 16 3:00 PM
Tao ra Exception, nem ngoai lệ
> Trong Java tao ra 1 déi trong Exception khi cé
lỗi và chuyền nó vào môi trường JVM tại thời
điểm chạy CT được gọi là ném ngoại lệ - throwing
an exception
> Dự đoán lỗi có thể xảy ra và chuẩn bị mã xử lý gọi là bắt lay lỗi — catching an exception
> Các lỗi liên quan đến logic của ứng dụng nên
được biêu diễn bằng cách định nghĩa các lớp con
của Exception
Y public class BankingException extends Exception { public BankingException(String msg) {super(msg); }
}
6 of 16
3:00 PM
Xw ly Exception
> Trinh bién dich Java yéu cau tat ca checked Exception phai duoc xtr ly
> Hai la chon xu ly Exception:
* bắt lỗi và xử lý dùng khói try — catch - finally
# tuyên bó ném lỗi dùng khai báo fhirows
> Các lỗi RuntimeException khi thi hành 1 phương thức sẽ kết thúc việc thi hành các lệnh tiếp theo
của phương thức, đồng thời, exception này sẽ được ném về phía đối tượng gọi phương thức
nêu không có mã xử lý sẽ trả về hàm main đề kết thúc
8 of 16
3:00 PM
Trang 3
Sw dung try catch finally
> try{ doSomething; }
catch(Exception e){ doXulyLoi; }
finally { alwayDoThis; }
> khối try:
+ các câu lệnh có khả năng sinh lỗi exception
v sẽ kết thúc thi hành các lệnh còn lại để nhảy sang khói catch khi
có lôi xảy ra
> khéi catch:
+ các câu lệnh xử lý lỗi
+ Thông tin vẻ lỗi lưu trong Exception e
+ nêu có nhiều loại Exception thì có thẻ dùng nhiều khói catch
* Không thê catch néu không có khả năng lỗi trong khói try
> khối finally: (optional)
+ các câu lệnh sẽ được thi hành, bát kẻ có lỗi hay không
3.00 py, loi có thê xảy ra trong khôi finally 9of 16
6 Consider the tollowing class hicrarchy and code tragment:
java lang.Exceptrion java.io D0Excaprion
\ java.io StreeCorruptedexception Jeva.net Bal formedURLExcaption
1 try {
2 /f assume s is previously defined
3 URL u = new URLs);
4 f jin is an ObjectInputStream
5 Object o = in readObject();
6 System.out.printin€’ Success’);
7 3
œ catch (MalformedURLException e) {
9 System.out.printin€’ Bad URL");
10 }
11 catch CStreamCorruptedException e) {
12 System.out.printin€ Bad file contents”);
13 }
14 catch CException e) {
15 System.out.printin€ General exception’);
16 }
17 finally {
18 System.out.printin€’ doing finally part");
Su dung try catch
Example:
int x = (int)(Math.random() * 5);
int y = (int)(Math.random() * 10);
int [] z = new int[5];
try {
System.out.printin(“y/x gives “ + (y/x));
System.out.printin(“y is “+ y + “ z[y] is “ + z[y]);
}
catch (ArithmeticException e) { System.out.printin(“Arithmetic problem “ + e);
}
catch (ArrayIndexOutOfBoundsException e) { System.out.printin(“Subscript problem “ + e);
}
> Try phai di kem voi catch hoac finally 100F 16
Exception va Overriding
> phuong thirc override khéng được phép ném ra
nhiéu checked exceptions hơn phương thức
nguyên thuy ở lớp cơ Sở
Vì lý do đó, một số lớp cơ sở cần phải khai báo ném ra Exception du thực tế không hề có Exception
> phương thức override có thề ném ra các Exception sao cho các exception này là lớp con
của exception đã được ném ra ở phương thức
nguyên thuỷ
12 of 16
3:00 PM
Trang 4
Exception & Overriding
Review question
The method risky() might throw a java.io.|OException,
jJava.lang.RuntimeException, java.net.MalformedURLException
(which is a subclass of java.io.|OException) Which of the following
classes and sets of classes are legal?
A public class SomeClass {
public void aMethod() {
riskyQ;
}
}
B public class SomeClass {
public void aMethod() throws IOException {
riskyQ;
}
13 of 16 3:00 PM
Exception & Overriding
E public class SomeClass {
public void aMethod() throws MalformedURLException {
try {
risky();
}
catch (IOException e) {}
}
public class AnotherClass extends SomeClass {
public void aMethod() throws java.io.IOException {
super.aMethod();
15 of 16
3:00 PM
Exception & Overriding
C public class SomeClass { public void aMethod() throws RuntimeException { risky();
}}
D public class SomeClass { public void aMethod() {
try {
risky();
}
catch (IOException e) { e.printStackTrace();
} }
14 of 16 3:00 PM