You are on page 1of 5

Exceptionn là những sự kiện hoặc lỗi không mong đợi có thể xảy ra trong quá

trình thực thi của chương trình. Ngoại lệ có thể được gây ra bởi nhiều nguyên
nhân, chẳng hạn như:

Lỗi do người dùng nhập dữ liệu không hợp lệ


Lỗi do phần cứng hoặc phần mềm gặp sự cố
Lỗi do chương trình không được viết đúng cách
Khi một exception xảy ra, chương trình sẽ được "ném" (throw) ra khỏi luồng thực
thi bình thường. Điều này có nghĩa là chương trình sẽ tạm dừng thực thi ở dòng
lệnh nơi ngoại lệ xảy ra và tìm kiếm một phần mã được thiết lập để xử lý ngoại lệ
đó.

Phần mã được thiết lập để xử lý ngoại lệ được gọi là "bộ xử lý ngoại lệ" (exception
handler). Bộ xử lý ngoại lệ có thể thực hiện một số hành động để khắc phục ngoại
lệ, chẳng hạn như:

Hiển thị thông báo lỗi cho người dùng


Thử lại thao tác đã gây ra ngoại lệ
Tăng cường thông báo lỗi cho nhà phát triển
Việc xử lý ngoại lệ giúp chương trình duy trì tính ổn định và cung cấp cơ hội cho
việc xử lý lỗi hoặc thí nghiệm các giải pháp thay thế.

Dưới đây là một số ví dụ về ngoại lệ:

Lỗi chia cho 0


Lỗi truy cập mảng vượt quá giới hạn
Lỗi nhập dữ liệu không hợp lệ
Lỗi kết nối đến cơ sở dữ liệu thất bại
Lỗi bộ nhớ hết
Lỗi hệ thống
Việc xử lý ngoại lệ là một kỹ năng quan trọng đối với bất kỳ lập trình viên nào.
Việc hiểu cách xử lý ngoại lệ sẽ giúp bạn viết các chương trình ổn định và dễ bảo
trì hơn.

....
Các ngoại lệ được kiểm tra

 Kiểm tra tại thời điểm biên dịch: Trình biên dịch Java yêu cầu xử lý ngoại lệ được kiểm
tra một cách rõ ràng, thúc đẩy việc xem xét cẩn thận các vấn đề tiềm ẩn và cấu trúc mã
vững chắc hơn.
 Xử lý hoặc khai báo: Bạn phải bao gồm mã có thể ném ngoại lệ được kiểm tra trong
các khối try-catch hoặc khai báo chúng bằng từ khóa throws trong chữ ký phương
thức.
 Các điều kiện có thể phục hồi: Chúng thường đại diện cho các tình huống có thể được
giải quyết bằng chương trình, chẳng hạn như vấn đề truy cập tệp, lỗi mạng hoặc sự cố
cơ sở dữ liệu.
 Kế thừa: Chúng là lớp con của Exception nhưng không phải là lớp con
của RuntimeException.
 Các ví dụ phổ biến:
o IOException: Lỗi liên quan đến tệp (ví dụ: không tìm thấy tệp, vấn đề về quyền).
o SQLException: Lỗi liên quan đến cơ sở dữ liệu (ví dụ: kết nối thất bại, truy vấn không
hợp lệ).
o ClassNotFoundException: Xảy ra khi không thể tìm thấy một lớp.

Lợi ích của ngoại lệ được kiểm tra:

 Phát hiện lỗi sớm: Kiểm tra tại thời điểm biên dịch giúp xác định các vấn đề tiềm ẩn
sớm trong quá trình phát triển, giảm khả năng xảy ra lỗi bất ngờ khi chạy.
 Xử lý lỗi bắt buộc: Đảm bảo rằng các nhà phát triển xem xét và giải quyết các vấn đề
tiềm ẩn, dẫn đến mã bền bỉ và dễ bảo trì hơn.
 Cải thiện độ rõ ràng của mã: Xử lý ngoại lệ rõ ràng thúc đẩy khả năng đọc và hiểu mã
bằng cách làm nổi bật các kịch bản lỗi tiềm ẩn.

Các cân nhắc chính:


 Sử dụng quá mức: Sử dụng quá mức có thể làm rối mã và khiến nó khó theo dõi hơn.
 Xử lý không cần thiết: Xử lý một số ngoại lệ được kiểm tra có thể dư thừa nếu mã đã
thực hiện các hành động thích hợp để ngăn chặn chúng.
 Các cách tiếp cận thay thế: Trong một số trường hợp, ngoại lệ không được kiểm tra
hoặc xử lý ngoại lệ tùy chỉnh có thể phù hợp hơn.

Thực tiễn tốt nhất:

 Sử dụng ngoại lệ được kiểm tra cho các lỗi có thể phục hồi yêu cầu thực hiện các hành
động cụ thể.
 Chọn loại ngoại lệ phù hợp để phản ánh chính xác bản chất của vấn đề.
 Cung cấp thông báo lỗi có ý nghĩa để hỗ trợ gỡ lỗi và khắc phục sự cố.
 Xem xét sự cân bằng giữa ngoại lệ được kiểm tra và ngoại lệ không được kiểm tra khi
thiết kế chiến lược xử lý lỗi của bạn.

Một số ví dụ cụ thể về cách sử dụng ngoại lệ được kiểm tra:

 Khi đọc hoặc ghi tệp, bạn có thể sử dụng ngoại lệ IOException để xử lý các lỗi như
không tìm thấy tệp hoặc lỗi quyền.
 Khi truy cập cơ sở dữ liệu, bạn có thể sử dụng ngoại lệ SQLException để xử lý các lỗi
như kết nối thất bại hoặc truy vấn không hợp lệ.
 Khi tải một lớp, bạn có thể sử dụng ngoại lệ ClassNotFoundException để xử lý lỗi không
tìm thấy lớp.

Nhìn chung, ngoại lệ được kiểm tra là một công cụ quan trọng để quản lý lỗi trong Java.
Chúng giúp đảm bảo rằng các chương trình Java được viết một cách an toàn và đáng
tin cậy.

.......................................

RÕ HƠN VỀ MỤC CÂN NHẮC KHI SỬ DỤNG:


Sử dụng quá mức

Sử dụng ngoại lệ được kiểm tra quá mức có thể làm rối mã và khiến nó khó theo dõi
hơn. Điều này là do ngoại lệ được kiểm tra yêu cầu sử dụng khối try-catch hoặc khai
báo ngoại lệ trong chữ ký phương thức. Điều này có thể làm cho mã trở nên phức tạp
và khó hiểu hơn.
Để tránh sử dụng quá mức ngoại lệ được kiểm tra, bạn nên chỉ sử dụng chúng cho các
lỗi có thể phục hồi yêu cầu thực hiện các hành động cụ thể. Bạn nên tránh sử dụng
chúng cho các lỗi không thể phục hồi hoặc các lỗi không yêu cầu thực hiện các hành
động cụ thể.

Xử lý không cần thiết

Xử lý một số ngoại lệ được kiểm tra có thể dư thừa nếu mã đã thực hiện các hành
động thích hợp để ngăn chặn chúng. Ví dụ, nếu bạn đang cố đọc một tệp, bạn có thể
sử dụng phương thức exists() để kiểm tra xem tệp có tồn tại hay không trước khi cố
gắng đọc nó. Nếu tệp không tồn tại, phương thức exists() sẽ trả về false, điều này sẽ
ngăn chặn ngoại lệ IOException xảy ra.

Để tránh xử lý không cần thiết, bạn nên xem xét các hành động mà mã đang thực hiện
để ngăn chặn ngoại lệ xảy ra. Nếu mã đã thực hiện các hành động thích hợp để ngăn
chặn ngoại lệ xảy ra, thì bạn có thể không cần xử lý ngoại lệ đó.

Các cách tiếp cận thay thế

Trong một số trường hợp, ngoại lệ không được kiểm tra hoặc xử lý ngoại lệ tùy chỉnh
có thể phù hợp hơn so với ngoại lệ được kiểm tra.

Ngoại lệ không được kiểm tra

Ngoại lệ không được kiểm tra là các ngoại lệ không được yêu cầu xử lý rõ ràng. Chúng
là các lớp con của RuntimeException.

Ngoại lệ không được kiểm tra thường được sử dụng cho các lỗi không thể phục hồi
hoặc các lỗi không yêu cầu thực hiện các hành động cụ thể. Ví dụ, lỗi số học thường là
ngoại lệ không được kiểm tra.

Xử lý ngoại lệ tùy chỉnh

Xử lý ngoại lệ tùy chỉnh là việc tạo ra các lớp ngoại lệ tùy chỉnh của riêng bạn. Các lớp
ngoại lệ tùy chỉnh cho phép bạn định nghĩa các ngoại lệ cụ thể cho ứng dụng của mình.

Xử lý ngoại lệ tùy chỉnh có thể hữu ích trong một số trường hợp, chẳng hạn như khi
bạn cần cung cấp thông tin chi tiết hơn về lỗi hoặc khi bạn cần thực hiện các hành động
cụ thể khi lỗi xảy ra.

Tóm lại, bạn nên cân nhắc các yếu tố sau khi quyết định sử dụng ngoại lệ được kiểm
tra:
 Loại lỗi là gì?
 Lỗi có thể phục hồi hay không?
 Lỗi yêu cầu thực hiện các hành động cụ thể hay không?
 Mã đã thực hiện các hành động thích hợp để ngăn chặn ngoại lệ xảy ra hay không?

You might also like