Xử Lý Ngoại Lệ (Exception Handling): Giúp Chương Trình Không Bị 'Sập' Đột Ngột

Trong quá trình vận hành ứng dụng, không phải lúc nào mọi thứ cũng diễn ra suôn sẻ. Người dùng có thể nhập sai định dạng dữ liệu, chia một số cho 0, hoặc mở một file không tồn tại. Nếu không được chuẩn bị trước, chương trình Java sẽ lập tức ngắt đột ngột (thường gọi là "chết" hay "sập" app). Để ngăn chặn điều này, Java cung cấp cơ chế Xử lý ngoại lệ (Exception Handling).

Hướng dẫn xử lý ngoại lệ Exception Handling trong Java với khối lệnh try catch finally
Ảnh minh họa: Xử lý ngoại lệ trong Java (Exception Handling) - GP Coder (Lập trình Java)

1. Ngoại lệ (Exception) là gì?

Ngoại lệ (Exception) là một sự kiện bất thường xảy ra trong quá trình thực thi chương trình, làm gián đoạn luồng chạy bình thường của mã nguồn.

Ví dụ: Khi bạn thực hiện phép chia 10 / 0, chương trình sẽ báo lỗi ArithmeticException và dừng lại ngay tại thời điểm đó. Các dòng lệnh phía sau sẽ không còn cơ hội được chạy.

2. Cây thừa kế và phân loại Ngoại lệ trong Java

Tất cả các lớp biểu diễn lỗi trong Java đều kế thừa từ lớp cha cao nhất là Throwable. Phía dưới Throwable chia thành hai nhánh chính:

  • Error: Là những lỗi nghiêm trọng liên quan đến hệ thống hoặc môi trường thực thi (ví dụ: OutOfMemoryError, StackOverflowError). Lập trình viên thường không thể dự đoán hoặc bắt các lỗi này trong mã nguồn.
  • Exception: Là các tình huống bất thường mà chương trình có thể chủ động phòng ngừa và xử lý.

Phân biệt Checked Exception và Unchecked Exception

Trong nhánh Exception, Java chia làm hai loại chính:

  • Checked Exception (Ngoại lệ kiểm tra): Là các ngoại lệ bắt buộc phải được xử lý ngay từ lúc viết code (Compile-time). Nếu không dùng khối try-catch hoặc khai báo throws, trình biên dịch sẽ báo lỗi ngay. Ví dụ: FileNotFoundException, IOException.
  • Unchecked Exception (Ngoại lệ không kiểm tra): Còn gọi là Runtime Exception, là các lỗi phát sinh khi chương trình đang chạy. Trình biên dịch không bắt buộc bạn phải viết code xử lý trước, nhưng nếu xảy ra sẽ làm dừng chương trình. Ví dụ: NullPointerException, ArithmeticException, ArrayIndexOutOfBoundsException.

3. Bắt và xử lý ngoại lệ với try-catch-finally

Để kiểm soát các nguy cơ gây lỗi, Java cung cấp cấu trúc try-catch-finally.

Cấu trúc cơ bản

  • try: Bao bọc đoạn mã có nguy cơ phát sinh ngoại lệ.
  • catch: Bắt và xử lý ngoại lệ nếu nó xảy ra trong khối try.
  • finally: Khối lệnh luôn luôn được thực thi dù có ngoại lệ xảy ra hay không (thường dùng để đóng tài nguyên như file, kết nối cơ sở dữ liệu).

Ví dụ thực tế

Dưới đây là ví dụ xử lý tình huống chia cho 0 và truy cập mảng vượt giới hạn:

public class ExceptionDemo {      public static void main(String[] args) {          try {              int[] numbers = {1, 2, 3};              System.out.println(


Nguồn tham khảo


📚 Chuỗi bài: Lộ Trình Tự Học Java Từ Con Số 0 Đến Ứng Dụng Thực Tế

Chuỗi 20 bài viết thiết kế dạng 'cầm tay chỉ việc' dành riêng cho người mới bắt đầu học lập trình Java. Lộ trình đi từ tư duy nền tảng, cú pháp cơ bản, lập trình hướng đối tượng (OOP) cho đến hoàn thiện một dự án thực tế nhỏ.

  1. 1. Java Là Giống Gì? Cài Đặt Environment (JDK & IntelliJ IDEA) Cực Nhanh
  2. 2. Giải Mã Chương Trình 'Hello World' Và Cấu Trúc Cơ Bản Của Bài Code Java
  3. 3. Biến Và Kiểu Dữ Liệu Trong Java: Cách Lưu Trữ Thông Tin Đúng Chuẩn
  4. 4. Toán Tử Trong Java: Hướng Dẫn Tính Toán Và So Sánh Chi Tiết
  5. 5. Nhập Xuất Dữ Liệu Với Scanner: Làm Cho Chương Trình Biết Tương Tác
  6. 6. Cấu Trúc Điều Kiện If-Else Và Switch-Case: Dạy Máy Tính Rẽ Nhánh Tư Duy
  7. 7. Vòng Lặp For, While Và Do-While Trong Java: Tự Động Hóa Công Việc Lặp Lại
  8. 8. Phương Thức (Method) Trong Java: Tái Sử Dụng Code Một Cách Thông Minh
  9. 9. Mảng Một Chiều (Array) Trong Java: Quản Lý Danh Sách Dữ Liệu Đơn Giản
  10. 10. Bài 10: Xử Lý Chuỗi Dữ Liệu Với String Và StringBuilder Trong Java
  11. 11. Lập Trình Hướng Đối Tượng (OOP): Lớp (Class) Và Đối Tượng (Object) Là Đâu?
  12. 12. Tính Đóng Gói (Encapsulation) Và Access Modifiers: Bảo Vệ Dữ Liệu Safe 100%
  13. 13. Tính Kế Thừa (Inheritance): Tái Sử Dụng Mã Nguồn Với Từ Khóa Extends
  14. 14. Tính Đa Hình (Polymorphism): Nạp Chồng (Overloading) Và Ghi Đè (Overriding)
  15. 15. Lộ Trình Tự Học Java: Tính Trừu Tượng (Abstraction) - Abstract Class Hay Interface?
  16. 16. Xử Lý Ngoại Lệ (Exception Handling): Giúp Chương Trình Không Bị 'Sập' Đột Ngột ← Bạn đang đọc
  17. 17. Java Collections Framework: Làm Quen Mảng Cố Định Với ArrayList
  18. 18. Lưu Trữ Cặp Dữ Liệu Key-Value Cực Kỳ Nhanh Với HashMap
  19. 19. Đọc Và Ghi File Trong Java: Lưu Trữ Dữ Liệu Lâu Dài Vào Ổ Cứng
  20. 20. Dự Án Thực Tế: Xây Dựng Ứng Dụng Quản Lý Sinh Viên Console Hoàn Chỉnh

← Bài trước: Lộ Trình Tự Học Java: Tính Trừu Tượng (Abstraction) - Abstract Class Hay Interface? Bài tiếp theo: Java Collections Framework: Làm Quen Mảng Cố Định Với ArrayList →

Nhận xét