CÓ – nhưng là BAD PRACTICE (thói quyến xấu)
Java cho phép catch block rỗng:
try {
int c = 4 / 0;
} catch (ArithmeticException e) {
// empty – nuốt exception
}
Tại sao không nên làm?
- **Mất thông tin lỗi**: Không log, không in stack trace, không xử lý → bug im lặng, khó debug.
- **Che giấu vấn đề**: Chương trình tiếp tục chạy sai logic mà không báo hiệu.
- **Vi phạm principle**: "Fail fast" – hãy để exception bốc lên hoặc handle có ý nghĩa.
Cách xử lý đúng
try {
int c = 4 / 0;
} catch (ArithmeticException e) {
// Tối thiểu: log
System.err.println("Lỗi chia cho 0: " + e.getMessage());
e.printStackTrace(); // hoặc logger.error("...", e);
// Hoặc recover: gán giá trị mặc định, retry, throw custom exception...
// throw new BusinessException("Không thể tính toán", e);
}
Khi nào có thể accept empty catch?
- Rất hiếm: ví dụ ignore
InterruptedExceptionkhi shutdown thread (nhưng vẫn nên restore interrupt flag:Thread.currentThread().interrupt()). - Code generated/temporary, nhưng vẫn nên comment lý do.
Static analysis tools (SonarQube, SpotBugs, Checkstyle) sẽ báo warning "Empty catch block".