Ngoại lệ là gì ?
Xử lý Ngoại lệ
Giới thiệu
Java có sẵn cơ chế cho việc kiểm soát lỗi và
bẫy lỗi
Cơ chế này giải quyết những sự kiện bất
thường hay mã xử lý cản trở chương trình
tiếp tục thực hiện như:
◦ Truy cập ngoài giới hạn mảng
◦ Chia cho 0
◦ Những con trỏ Null
◦ …
Các Ngoại lệ (Exception) cho phép chúng ta
kiểm soát các sự kiện này tự động khi chúng
xảy ra
Ngoại lệ là gì?
Một Ngoại lệ (Exception) là một lớp Java
Có nhiều lớp dẫn xuất của lớp Exception, mỗi
lớp tương ứng với một kiểu lỗi khác nhau hay
sự kiện bất thường mà chúng ta muốn kiểm
soát
Cách Java phát sinh Ngoại lệ
◦ Khi có lỗi hoặc sự kiện bất thường xuất hiện trong
đoạn chương trình, Java sẽ throw (ném ra) một Ngoại
lệ.
◦ Điều này có nghĩa rằng nó sẽ khởi tạo một lớp dẫn
xuất của lớp Exception.
◦ Khi đó phải cần một cơ chế để catching (bắt) trong
đoạn chương trình đó.
16 trang |
Chia sẻ: candy98 | Lượt xem: 541 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Lập trình Java - Chương 5: Xử lý Ngoại lệ - Lăng Uy Tín, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Xử lý Ngoại lệ
(Processing Exception)
Nội dung
Ngoại lệ là gì ?
Xử lý Ngoại lệ
Giới thiệu
Java có sẵn cơ chế cho việc kiểm soát lỗi và
bẫy lỗi
Cơ chế này giải quyết những sự kiện bất
thường hay mã xử lý cản trở chương trình
tiếp tục thực hiện như:
◦ Truy cập ngoài giới hạn mảng
◦ Chia cho 0
◦ Những con trỏ Null
◦
Các Ngoại lệ (Exception) cho phép chúng ta
kiểm soát các sự kiện này tự động khi chúng
xảy ra
Ngoại lệ là gì?
Một Ngoại lệ (Exception) là một lớp Java
Có nhiều lớp dẫn xuất của lớp Exception, mỗi
lớp tương ứng với một kiểu lỗi khác nhau hay
sự kiện bất thường mà chúng ta muốn kiểm
soát
Cách Java phát sinh Ngoại lệ
◦ Khi có lỗi hoặc sự kiện bất thường xuất hiện trong
đoạn chương trình, Java sẽ throw (ném ra) một Ngoại
lệ.
◦ Điều này có nghĩa rằng nó sẽ khởi tạo một lớp dẫn
xuất của lớp Exception.
◦ Khi đó phải cần một cơ chế để catching (bắt) trong
đoạn chương trình đó.
Ném Ngoại lệ
Thực chất, việc ném ra các Ngoại lệ trong Java
là một cách phương thức kết thúc xử lý
Ví dụ:
Bắt Ngoại lệ (Catching Exception)
Lúc bạn gọi một phương thức đã được khai
báo có khả năng ném ra một Ngoại lệ, bạn có
thể bắt Ngoại lệ sử dụng một khối try/catch.
Nếu Ngoại lệ được ném bên trong khối try,
đối tượng Ngoại lệ được truyền như một đối
số tới khối catch ở đó Ngoại lệ có thể được
kiểm soát
Bắt Ngoại lệ (Catching Exception)
Trong hầu hết các trường hợp, nếu một
phương thức có thể ném ra một Ngoại lệ và
bạn muốn gọi nó thì bạn phải xử lý Ngoại lệ
của phương thức đó
Tuy nhiên, nếu Ngoại lệ mà phương thức ném
ra là một lớp dẫn xuất của lớp
RunTimeException thì không cần phải tường
minh bắt Ngoại lệ (điều này bao gồm
IndexOutOfBoundsException từ ví dụ trước)
Nếu một RunTimeException được ném ra và
không được bắt, Java sẽ tự động abort (bỏ dở)
chương trình và in chồng vệt tin của ngoại lệ.
RunTimeException
Một số lớp dẫn xuất của lớp
RunTimeException
◦ ArithmeticException
◦ IndexOutOfBoundsException
◦ NegativeArraySizeException
◦ NullPointerException
◦ ArrayStoreException
◦ ClassCastException
◦ IllegalArgumentException
◦ SecurityException
◦ IllegalMonitorStateException
◦ IllegalStateException
◦ UnsupportedOperationException
Xử lý Ngoại lệ
Xử lý Ngoại lệ có thể sử dụng khối try/catch.
Ngoài ra, trong các phương thức ném ra cùng
Ngoại lệ có thể chuyển việc bắt Ngoại lệ cho
đoạn code gọi phương thức đó.
Nhiều khối catch
Đôi khi, một phương thức có thể ném ra nhiều hơn
một Ngoại lệ, hay khối try có thể gọi hai phương thức
khác nhau mà ném ra hai ngoại lệ khác nhau.
Nhiều khối catch
Tất cả các ngoại lệ đều là các lớp dẫn xuất
của lớp Exception, do đó có thể khái quát hóa
các khối catch để chấp nhận nhiều kiểu Ngoại
lệ khác nhau bởi việc sử dụng lớp cơ sở
Exception.
Ví dụ:
Khối finally
Đôi khi, khi gọi khối try/catch, một Ngoại lệ có
thể được ném ra trước khi một số đoạn mã
quan trọng cần được chạy ở cuối của khối try
Khối finally có thể được sử dụng chạy mã này
Dù một ngoại lệ được ném ra, khối finally luôn
luôn thực hiện
Ném lại Ngoại lệ
Bạn có thể ném lại Ngoại lệ sau khi bắt và xử lý nó
Nếu bạn ném lại một Ngoại lệ, bạn phải chỉ rõ rằng
phương thức gọi có khả năng ném Ngoại lệ.
Ví dụ:
Một số Ngoại lệ
Các lớp Ngoại lệ:
◦ IOException
◦ NumberFormatedException
◦ InterruptedException
◦ FileNotFoundException
◦
Các thông tin từ các đối tượng Ngoại lệ
◦ getCause()
◦ getMessage()
◦ printStackTrace()
Bạn cũng có thể định nghĩa lớp Ngoại lệ của mình
nhưng phải là một lớp dẫn xuất của lớp Exception hay
một trong số những lớp dẫn xuất của nó.
Tóm lại
Khái niêm Ngoại lệ
Cách xử lý Ngoại lệ
Một số Ngoại lệ