Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Java

Có thể để catch block rỗng trong Java không?

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 InterruptedException khi 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".