Chapter 11. Exceptions
Focus on improving, not proving.
📌 1. Tổng quan về Exception Handling
Trong Java, ngoại lệ (Exception) là một sự kiện xảy ra trong quá trình thực thi chương trình làm gián đoạn luồng thực thi bình thường. Java cung cấp cơ chế để bắt (catch), xử lý (handle) và khôi phục (recover) từ lỗi thông qua hệ thống try-catch-finally.
🔹 Có hai loại lỗi chính trong Java:
Loại lỗi
Mô tả
Error
Những lỗi nghiêm trọng không thể khắc phục được như OutOfMemoryError, StackOverflowError.
Exception
Những lỗi có thể xử lý được như NullPointerException, IOException, ArithmeticException.
📌 Ví dụ về lỗi không thể xử lý (Error
):
📌 Ví dụ về lỗi có thể xử lý (Exception
):
📌 2. Exception Hierarchy (Phân cấp ngoại lệ trong Java)
Tất cả các ngoại lệ trong Java đều kế thừa từ Throwable
.
✅ Error
: Lỗi nghiêm trọng (không bắt được).
✅ Exception
: Lỗi có thể xử lý được.
✅ RuntimeException
: Ngoại lệ xảy ra trong runtime (Unchecked Exception).
🔹 Checked vs Unchecked Exceptions
Loại
Mô tả
Ví dụ
Checked Exception
Bắt buộc phải xử lý (compile-time)
IOException, SQLException
Unchecked Exception
Không bắt buộc xử lý (runtime)
NullPointerException, ArithmeticException
📌 Ví dụ về Checked Exception (phải xử lý):
📌 Ví dụ về Unchecked Exception (không bắt buộc xử lý):
📌 3. Cơ chế Try-Catch-Finally
Java cung cấp 3 khối chính để xử lý ngoại lệ:
🔹 try-catch
Cú pháp:
📌 Ví dụ:
🔹 finally
finally
luôn chạy dù có ngoại lệ hay không.
📌 Ví dụ:
🔹 try-with-resources
Dùng cho AutoCloseable
như FileReader
, BufferedReader
.
📌 Ví dụ:
📌 4. Tạo Custom Exception
Chúng ta có thể tạo ngoại lệ riêng bằng cách kế thừa Exception
hoặc RuntimeException
.
📌 Ví dụ:
**📌 5. Throw vs Throws
Từ khóa
Mô tả
throw
Ném một ngoại lệ cụ thể trong code
throws
Khai báo phương thức có thể ném ngoại lệ
📌 Ví dụ về throw
:
📌 Ví dụ về throws
:
📌 6. Chặn Exception trong kế thừa
Nếu một phương thức throws
một ngoại lệ, phương thức override có thể:
Không khai báo ngoại lệ
Khai báo cùng ngoại lệ
Khai báo ngoại lệ con
📌 Ví dụ hợp lệ:
📌 Ví dụ không hợp lệ:
📌 7. Lưu ý quan trọng
✅ Luôn dùng try-with-resources
để tránh rò rỉ tài nguyên.
✅ Không nên catch Exception chung chung (catch (Exception e)
) trừ khi thật cần thiết.
✅ Chỉ bắt những ngoại lệ mà bạn có thể xử lý.
✅ Ghi log ngoại lệ để dễ debug.
📌 Ví dụ log lỗi đúng cách:
📌 8. Tổng kết
✅ Exception là lỗi có thể xử lý, Error là lỗi không thể khắc phục. ✅ Có Checked Exception (phải xử lý) và Unchecked Exception (không bắt buộc xử lý). ✅ Cơ chế xử lý: try-catch-finally, throw, throws. ✅ Có thể tạo Custom Exception. ✅ Dùng try-with-resources để tránh rò rỉ tài nguyên.
Last updated