Thông tin tài liệu
Xử lý ngoại lệ Nội dung Khái niệm xử lý ngoại lệ (exception handling) Ném bắt ngoại lệ Khai báo ngoại lệ Ném lại ngoại lệ Định nghĩa ngoại lệ Xử lý ngoại lệ constructor Nguyễn Việt Hà Xử lý ngoại lệ Tài liệu tham khảo Thinking in Java, chapter Java how to program, chapter 15 Nguyễn Việt Hà Xử lý ngoại lệ Lỗi ngoại lệ Mọi đoạn chương trình tiềm ẩn khả sinh lỗi
lỗi chủ quan: lập trình sai
lỗi khách quan: liệu, trạng thái hệ thống Ngoại lệ: trường hợp hoạt động khơng bình thường Xử lý ngoại lệ
làm Nguyễn Việt Hà để tiếp tục (tái) thực Xử lý ngoại lệ Cách xử lý lỗi truyền thống Cài đặt mã xử lý nơi phát sinh lỗi
Truyền trạng thái lên mức
thông qua tham số, giá trị trả lại biến tổng thể (flag) dễ nhầm cịn khó hiểu Khó kiểm sốt hết trường hợp
làm cho chương trình trở nên khó hiểu khơng phải lúc đầy đủ thông tin để xử lý không thiết phải xử lý lỗi số học, lỗi nhớ,… Lập trình viên thường quên không xử lý lỗi
chất người thiếu kinh nghiệm, cố tình bỏ qua Nguyễn Việt Hà Xử lý ngoại lệ Ví dụ int devide(int num, int denom, int& error) { if (0 != denom) { error = 0; return num/denom; } else { error = 1; return 0; } } Nguyễn Việt Hà Xử lý ngoại lệ Xử lý ngoại lệ (Exception handling) Java Xử lý ngoại lệ Java kế thừa từ C++ Dựa chế ném bắt ngoại lệ ngoại lệ: dừng chương trình chuyển điều khiển lên mức (nơi bắt ngoại lệ)
bắt ngoại lệ: xử lý với ngoại lệ
ném Ngoại lệ: đối tượng mang thông tin lỗi xảy lệ ném tự động
ngoại lệ ném tường minh
ngoại Nguyễn Việt Hà Xử lý ngoại lệ Phả hệ ngoại lệ Java Nguyễn Việt Hà Xử lý ngoại lệ Ưu điểm ném bắt ngoại lệ Dễ sử dụng chuyển điều khiển đến nơi có khả xử lý ngoại lệ
ném nhiều loại ngoại lệ
dàng Tách xử lý ngoại lệ khỏi thuật toán
tách mã xử lý
sử dụng cú pháp khác Khơng bỏ sót ngoại lệ (ném tự động) Làm chương trình dễ đọc hơn, an toàn Nguyễn Việt Hà Xử lý ngoại lệ Ném ngoại lệ (tường minh) Ném ngoại lệ câu lệnh throw if (0==denominator) { throw new Exception(); } else res = nominator / denominator; Nguyễn Việt Hà Xử lý ngoại lệ 10 Ném lại ngoại lệ Sau bắt ngoại lệ, thấy cần thiết ném lại ngoại lệ vừa bắt chương trình mức tiếp tục xử lý try { } catch (Exception e) { System.out.println(e.getMessage()); throw e; } Nguyễn Việt Hà Xử lý ngoại lệ 22 Lần vết ngoại lệ StackTrace Có thể sử dụng phương thức printStackTrace() để lần vết vị trí phát sinh ngoại lệ
debug Nguyễn Việt Hà chương trình Xử lý ngoại lệ 23 public class Test4 { void methodA() throws Exception { methodB(); throw new Exception(); } void methodB() throws Exception { methodC(); throw new Exception(); } void methodC() throws Exception { throw new Exception(); } public static void main(String[] args) { Test4 t = new Test4(); try { t.methodA(); } catch(Exception e) { e.printStackTrace(); } } } Nguyễn Việt Hà Xử lý ngoại lệ 24 Ném ngoại lệ từ main() Nếu khơng có phương thức bắt ngoại lệ, ngoại lệ truyền lên phương thức main() cần xử lý Nếu không muốn xử lý ngoại lệ, để ngoại lệ truyền lên mức điều khiển máy ảo cách khai báo main() ném ngoại lệ
chương trình bị dừng hệ thống in thông tin ngoại lệ Console (printStackTrace()) Nguyễn Việt Hà Xử lý ngoại lệ 25 Ví dụ import java.io.*; public class Echo { public static void main(String[] args) throws IOException { InputStreamReader reader; BufferedReader bufReader; reader = new InputStreamReader(System.in); bufReader = new BufferedReader(reader); String s; while( null != (s = bufReader.readLine()) System.out.println(s); } } Nguyễn Việt Hà Xử lý ngoại lệ 26 Hai loại ngoại lệ Java phân biệt hai loại ngoại lệ ngoại lệ cần kiểm tra ngoại lệ không cần kiểm tra Ngoại lệ cần kiểm tra: chương trình dịch ln kiểm tra xem có viết code xử lý với ngoại lệ không (try catch/ throws)
IOException Ngoại lệ không cần kiểm tra: ngoại lệ loại trừ viết chương trình tốt
RuntimeException Nguyễn Việt Hà Xử lý ngoại lệ 27 Ví dụ: Checked Exception InputStreamReader reader; BufferedReader bufReader; reader = new InputStreamReader(System.in); bufReader = new BufferedReader(reader); try { String s = bufReader.readLine(); } catch (IOException e) { } Nguyễn Việt Hà Xử lý ngoại lệ 28 Ví dụ: Unchecked Exception int num1 = Integer.ValueOf(str1).intValue(); int num2 = Integer.ValueOf(str2).intValue(); int num3 = num1 / num2; Hầu hết ngoại lệ thuộc lớp RuntimeException hệ thống ném tự động
lỗi số học
lỗi số Nguyễn Việt Hà Xử lý ngoại lệ 29 Hoán đổi ngoại lệ Có thể đổi ngoại lệ cần kiểm tra thành ngoại lệ không cần kiểm tra
chưa biết nên làm void wrapException() { try { throw new IOException(); } catch (IOException e) { throw new RuntimeException(e); } } Nguyễn Việt Hà Xử lý ngoại lệ 30 try { wrapException(); } catch (RuntimeException e) { try { throw e.getCause(); } catch (IOException e1) { … } } Nguyễn Việt Hà Xử lý ngoại lệ 31 Tự định nghĩa ngoại lệ Chúng ta tạo lớp ngoại lệ để phục vụ mục đích riêng Lớp ngoại lệ phải kế thừa từ lớp Exception lớp dẫn xuất lớp Có thể cung cấp hai constructor mặc định (không tham số)
constructor nhận tham số String truyền tham số cho phương thức khởi tạo lớp sở
constructor Nguyễn Việt Hà Xử lý ngoại lệ 32 Ví dụ class SimpleException extends Exception { } class MyException extends Exception { public MyException() {} public MyException(String msg) { super(msg); } } Nguyễn Việt Hà Xử lý ngoại lệ 33 Khởi tạo đối tượng xử lý ngoại lệ Làm để thông báo hàm khởi tạo đối tượng gặp lỗi
khơng có giá trị trả lại Một cách khởi tạo với trạng thái đặc biệt hi vọng có mã chương trình kiểm tra trạng thái Cách hợp lý ném ngoại lệ Nguyễn Việt Hà Xử lý ngoại lệ 34 class InputFile { public InputFile(String fname) throws IOException { } } try { InputFile fin = new InputFile(”data.txt”); } catch (IOException e) { System.err.println(e.getMessage); } Nguyễn Việt Hà Xử lý ngoại lệ 35 Bài tập thực hành Tìm hiểu phả hệ ngoại lệ Java Thực hành
ném bắt ngoại lệ
khai báo phương thức ném ngoại lệ
constructor ném ngoại lệ
tự định nghĩa ngoại lệ Nguyễn Việt Hà Xử lý ngoại lệ 36 ... Khái niệm xử lý ngoại lệ (exception handling) Ném bắt ngoại lệ Khai báo ngoại lệ Ném lại ngoại lệ Định nghĩa ngoại lệ Xử lý ngoại lệ constructor Nguyễn Việt Hà Xử lý ngoại lệ Tài liệu... Hà Xử lý ngoại lệ Xử lý ngoại lệ (Exception handling) Java Xử lý ngoại lệ Java kế thừa từ C++ Dựa chế ném bắt ngoại lệ ngoại lệ: dừng chương trình chuyển điều khiển lên mức (nơi bắt ngoại lệ) ... lệ)
bắt ngoại lệ: xử lý với ngoại lệ
ném Ngoại lệ: đối tượng mang thông tin lỗi xảy lệ ném tự động
ngoại lệ ném tường minh
ngoại Nguyễn Việt Hà Xử lý ngoại lệ Phả hệ ngoại lệ Java Nguyễn
Ngày đăng: 11/12/2022, 21:45
Xem thêm: