Tải bản đầy đủ (.pdf) (16 trang)

Lập trình căn bản Java Xử lý ngoại lệ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.82 MB, 16 trang )

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ệ





×