1. Trang chủ
  2. » Thể loại khác

Xử lý ngoại lệ (Exception Handling)

11 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 11
Dung lượng 202,19 KB

Nội dung

Xử lý ngoại lệ (Exception Handling) Bởi Huỳnh Công Pháp Giới thiệu Exception là một loại lỗi đặc biệt Lỗi này xuất hiện vào lúc thực thi chương trình Các trạng thái không bình thường xảy ra trong khi[.]

Xử lý ngoại lệ (Exception Handling) Xử lý ngoại lệ (Exception Handling) Bởi: Huỳnh Công Pháp Giới thiệu Exception loại lỗi đặc biệt Lỗi xuất vào lúc thực thi chương trình Các trạng thái khơng bình thường xảy thi hành chương trình tạo exception Những trạng thái trước ta xây dựng chương trình Nếu bạn khơng xử lý trạng thái chương trình bị kết thúc đột ngột Ví dụ, việc chia cho tạo lỗi chương trình Ngơn ngữ Java cung cấp chế dùng để xử lý ngoại lệ hiệu Việc xử lý làm hạn chế tối đa trường hợp hệ thống bị hỏng (crash) hay hệ thống bị ngắt đột ngột Tính làm cho Java trở thành ngơn ngữ lập trình mạnh Mục đích việc xử lý ngoại lệ Một chương trình nên có chế xử lý ngoại lệ thích hợp Nếu khơng, chương trình bị ngắt ngoại lệ xảy Trong trường hợp đó, tất nguồn tài nguyên mà hệ thống cấp khơng giải phóng Điều gây lãng phí tài nguyên Để tránh trường hợp này, tất nguồn tài nguyên mà hệ thống cấp nên thu hồi lại Tiến trình địi hỏi chế xử lý ngoại lệ thích hợp Xét thao tác vào (I/O) tập tin Nếu việc chuyển đổi kiểu liệu không thực đúng, ngoại lệ xảy chương trình bị hủy mà khơng đóng tập tin lại Lúc tập tin dễ bị hư hại nguồn tài nguyên cấp phát cho tập tin không trả lại cho hệ thống Xử lý ngoại lệ Khi ngoại lệ xảy ra, đối tượng (object) tương ứng với ngoại lệ tạo Đối tượng sau truyền cho phương thức nơi mà ngoại lệ xảy Đối tượng chứa thông tin chi tiết ngoại lệ Thơng tin nhận xử lý Các môi trường runtime ‘IllegalAccessException’, ‘EmptyStackException’ v.v… tạo ngoại lệ Chương trình đơi tự tạo ngoại lệ Lớp ‘Throwable’ 1/11 Xử lý ngoại lệ (Exception Handling) Java cung cấp lớp lớp Exception (lớp thừa kế), lớp lớp cha tất ngoại lệ khác Mơ hình xử lý ngoại lệ Trong Java, mơ hình xử lý ngoại lệ giám sát việc thực thi mã để phát ngoại lệ Mơ hình xử lý ngoại lệ Java gọi ‘catch and throw’ Trong mơ hình này, ngoại lệ xảy ra, ngoại lệ bị chặn chương trình chuyển đến khối xử lý ngoại lệ Người lập trình phải xử lý ngoại lệ khác phát sinh chương trình Các ngoại lệ phải xử lý, thoát khỏi chương trình xảy Ngơn ngữ Java cung cấp từ khoá sau để xử lý ngoại lệ: • • • • • try catch throw throws finally Dưới cấu trúc mơ hình xử lý ngoại lệ: try { // đoạn mã có khả gây ngoại lệ } catch(Exception e1) { // Nếu lệnh khối ‘try’ tạo ngoại lệ có loại e1, thực //xử lý ngoại lệ không chuyển xuống khối 'catch' } catch(Exception e2) { // Nếu lệnh khối ‘try’ tạo ngoại lệ có loại e2, thực //xử lý ngoại lệ không chuyển xuống khối 'catch' } catch(Exception eN) { // Nếu lệnh khối ‘try’ tạo ngoại lệ có loại eN, thực //xử lý ngoại lệ không chuyển xuống khối 'catch' } finally { // khối lệnh ln thực cho dù ngoại lệ có xảy hay không } Các ưu điểm mô hình ‘catch throw’ Mơ hình ‘catch throw’ có hai ưu điểm: • Người lập trình phải xử lý ngoại lệ cần thiết Không cần phải thực mức • Thơng báo lỗi tiến hành xử lý ngoại lệ 2/11 Xử lý ngoại lệ (Exception Handling) Các khối ‘try’ ‘catch’ Khối ‘try-catch’ sử dụng để thi hành mơ hình ‘catch throw’ việc xử lý ngoại lệ Khối ‘try’ chứa tập lệnh thi hành Các ngoại lệ bị chặn thi hành tập lệnh Phương thức có khả tạo ngoại lệ khai báo khối ‘try’ Một hay nhiều khối ‘catch’ theo sau khối ‘try’ Các khối ‘catch’ bắt ngoại lệ có khả tạo trong khối ‘try’ Hãy xem khối ‘try’ đây: try { doFileProcessing(); // phương thức người sử dụng định nghĩa displayResults(); } catch (Exeption e) // thể ngoại lệ { System.err.println(“Error :” + e.toString()); e.printStackTrace(); } Ở đây, ‘e’ đối tượng lớp ‘Exception’ Chúng ta sử dụng đối tượng để in chi tiết ngoại lệ Các phương thức ‘toString’ ‘printStackTrace’ sử dụng để mô tả ngoại lệ xảy Hình sau kết xuất phương thức ‘printStackTrace()’ Khối Try Catch Để xử lý ngoại lệ nào, ta phải kiểu ngoại lệ tương ứng catch(Exception e) Khi ngoại lệ thuộc kiểu nào, sử dụng lớp ‘Exception’ để bắt ngoại lệ Khối ‘catch()’ bắt giữ lỗi xảy thi hành phương thức ‘doFileProcessing’ hay ‘display’ Nếu lỗi xảy thi hành phương thức ‘doFileProcessing()’, lúc phương thức ‘displayResults()’ khơng gọi Chương trình chuyển đến thực khối ‘catch’ Để có nhiều lớp xử lý lỗi hơn, ‘LookupException’ thay đối tượng ngoại lệ chung (Exceptione), lỗi thực tế đối tượng thuộc lớp 'LookupException’ hay số lớp 3/11 Xử lý ngoại lệ (Exception Handling) Lỗi truyền qua khối ‘try catch’ gặp ‘catch’ nó, khơng tìm thấy chương trình phải dừng thực Các khối chứa nhiều Catch Nhiều khối ‘catch’ xử lý loại ngoại lệ khác cách độc lập Chúng liệt kê đoạn mã sau: try { doFileProcessing(); displayResults(); } catch(LookupException e) // e – LookupException object { handleLookupException(e); // phương thức xử lý lỗi người sử dụng //định nghĩa } catch(Exception e) { System.err.println(“Error:” + e.printStackTrace()); } } Trong trường hợp này, khối ‘catch’ bắt giữ ‘LockupException’ Khối ‘catch’ thứ hai xử lý kiểu ngoại lệ khác với khối ‘catch’ thứ Một chương trình chứa khối ‘try’ lồng Ví dụ đoạn mã đây: try { statement 1; statement 2; try { statement1; statement2; } catch(Exception e) // khối try { } } catch(Exception e) // khối try { } … Khi sử dụng ‘try’ lồng nhau, khối ‘try’ bên thi hành Bất kỳ ngoại lệ bị chặn khối ‘try’ bị bắt giữ khối ‘catch’ theo sau Nếu khối ‘catch’ thích hợp khơng tìm thấy khối ‘catch’ khối ‘try’ bên xem xét Nếu không, Java Runtime Environment xử lý ngoại lệ chương trình minh họa cách sử dụng khối ‘try’ ‘catch’ class TryClass { public static void main(String args[]) { int demo=0; try { System.out.println(20/demo); } catch(ArithmeticException a) { System.out.println(“Cannot Divide by zero”); } } } Kết xuất chương trình: 4/11 Xử lý ngoại lệ (Exception Handling) Cannot divide by zero Trong chương trình này, số chia cho Đây khơng phép tốn số học hợp lệ Do ngoại lệ xảy bắt giữ khối catch Khi nhận biết loại ngoại lệ xảy ra, ta viết lệnh khối ‘catch’ tương ứng Ở đây, ‘a’ sử dụng đối tượng ArithmeticException để in chi tiết ngoại lệ Nếu bạn thay lệnh ‘System.out.println’ khối ‘catch’ lệnh ‘System.out.println(a.getMessage())’ kết xuất chương trình sau: Câu thơng báo lỗi Khi khối ‘try’ sử dụng mà khơng có khối ‘catch’ nào, chương trình biên dịch mà không gặp lỗi nào bị ngắt thực thi Bởi ngoại lệ xảy thực thi chương trình mà khơng xử lý Khối ‘finally’ Khi ngoại lệ xuất hiện, phương thức thực thi bị dừng mà khơng hồn thành Nếu điều xảy ra, đoạn mã phía sau (ví dụ đoạn mã có chức thu hồi tài nguyên, lệnh đóng tập viết cuối phương thức) khơng gọi Java cung cấp khối ‘finally’ để giải việc Khối ‘finally’ thực tất việc thu dọn ngoại lệ xảy Khối sử dụng kết hợp với khối ‘try’ Khối ‘finally’ chứa câu lệnh thu hồi tài nguyên cho hệ thống hay lệnh in câu thơng báo Các lệnh bao gồm: • Đóng tập tin • Đóng ResultSet (được sử dụng chương trình sở liệu) 5/11 Xử lý ngoại lệ (Exception Handling) • Đóng lại kết nối tạo sở liệu try { doSomethingThatMightThrowAnException(); } finally { cleanup(); } Phương thức ‘cleanup()’ gọi phương thức ‘doSomethingThatMightThrowAnException()’ gây ngoại lệ Mặt khác ‘cleanup()’ gọi khơng có ngoại lệ xảy thực tiếp phần sau khối lệnh ‘finally’ Khối ‘finally’ tuỳ ý, không bắt buộc Khối đặt sau khối ‘catch’ cuối Chương trình thực thi câu lệnh khối ‘finally’ sau gặp câu lệnh ‘return’ hay lệnh ‘break’ khối ‘try’ Khối ‘finally’ bảo đảm lúc thực thi, bất chấp có ngoại lệ xảy hay không [link] Minh họa thực khối ‘try’, ‘catch’ ‘finally’ Khối lệnh ‘try’, ‘catch’ ‘finally’ Chương trình sử dụng khối ‘finally’ Ở đây, khối ‘finally’ thi hành bất chấp ‘ArithmeticException’ có xảy hay không Khối khai báo hoạt động thu dọn class FinallyDemo { String name; int no1,no2; FinallyDemo(String args[]) { try { name=new String(“Aptech Limited”); no1=Integer.parseInt(args[0]); no2=Integer.parseInt(args[1]); System.out.println(name); System.out.println(“Division Result is” + no1/no2); } catch(ArithmeticException i) { System.out.println(“Cannot Divide by zero”); } finally { name=null; // clean up code System.out.println(“Finally executed”); } } public static void main(String args[]) { new FinallyDemo(args); } } 6/11 Xử lý ngoại lệ (Exception Handling) Kết xuất chương trình: Khối Finally Trong ví dụ này, câu lệnh khối ‘finally’ ln ln thi hành, bất chấp ngoại lệ có xảy hay không Trong kết xuất trên, khối ‘finally’ thi hành khơng có ngoại lệ xảy Các ngoại lệ định nghĩa với lệnh ‘throw’ ‘throws’ Các ngoại lệ tạo cách sử dụng từ khố ‘throw’ Từ khóa ‘throw’ ngoại lệ vừa xảy Toán hạng throw đối tượng thuộc lớp thừa kế từ ‘Throwable’ Cách sử dụng lệnh ‘throw’ try { if (flag

Ngày đăng: 29/04/2022, 21:47

HÌNH ẢNH LIÊN QUAN

Khối ‘try-catch’ được sử dụng để thi hành mô hình ‘catch và throw’ của việc xử lý ngoại lệ - Xử lý ngoại lệ (Exception Handling)
h ối ‘try-catch’ được sử dụng để thi hành mô hình ‘catch và throw’ của việc xử lý ngoại lệ (Trang 3)
Bảng sau đây liệt kê một số ngoại lệ: - Xử lý ngoại lệ (Exception Handling)
Bảng sau đây liệt kê một số ngoại lệ: (Trang 8)
3. Mô hình xử lý lỗi của Java được gọi là mô hình 'catch and throw'? (Đúng/Sai) - Xử lý ngoại lệ (Exception Handling)
3. Mô hình xử lý lỗi của Java được gọi là mô hình 'catch and throw'? (Đúng/Sai) (Trang 10)
w