Nội dung
Danh sách bài học
- 01~20 phút
try / catch / finally — cây Throwable và cơ chế throw
Cây Throwable (Error, Exception, RuntimeException), try/catch/finally, throw, multi-catch Java 7+. Anti-pattern nuốt exception. Phần cơ chế sâu (stack trace, cause chain, exception table) ở bài 2.
- 02~14 phút
Đọc stack trace và cause chain — giữ dấu vết lỗi qua mọi layer
Cách đọc stack trace production trong 10 giây, JVM build stack trace qua fillInStackTrace thế nào, cause chain giữ exception gốc khi wrap qua layer, và suppressed exception.
- 03~14 phút
Exception table và cost của exception — throw rẻ, tạo đắt
Exception table trong bytecode giúp JVM dispatch catch bằng table lookup, không tốn runtime check. Chi phí thật nằm ở fillInStackTrace — anti-pattern control flow, kỹ thuật tối ưu hot path, và StackWalker.
- 04~16 phút
Checked vs Unchecked — cuộc tranh cãi kéo dài 20 năm
Phân biệt checked và unchecked exception, khi nào Java bắt khai throws, vì sao cộng đồng Java modern nghiêng về unchecked, và cách wrap checked thành unchecked đúng.
- 05~15 phút
try-with-resources — tự đóng resource không rò rỉ
Cú pháp try-with-resources từ Java 7, interface AutoCloseable, thứ tự close nhiều resource, suppressed exception, và vì sao pattern close-trong-finally cổ điển dễ sai.
- 06~16 phút
Custom exception — thiết kế hierarchy exception nghiệp vụ
Khi nào tạo exception riêng, cấu trúc class (constructor với cause, field context), hierarchy theo domain, global exception handler pattern, và cách chọn giữa exception và return value.
- 07~30 phút
Mini-challenge: Validator chain với exception
Bài thực hành khép lại module Exception Handling — xây validator kiểm tra User đăng ký, gom nhiều lỗi thành một ValidationException, và mô phỏng global handler.