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).
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-catchhoặc khai báothrows, 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
- Xử lý ngoại lệ trong Java (Exception Handling) - GP Coder (Lập trình Java)
- Xử lý ngoại lệ (Exception) trong Java | Khóa học java
- Xử lý ngoại lệ trong java như thế nào? - R2S Academy
- Xử lý ngoại lệ trong C# - (Try/Catch/Finally) trong C# - VietTuts
- Xử lý ngoại lệ (Try/Catch/Finally) trong C# - QuanTriMang.com
Nhận xét
Đăng nhận xét