Tìm hiểu về các loại ngoại lệ trong Java và một số sai lầm phổ biến

Như bạn đã thấy, có một số lỗi phổ biến bạn nên cố gắng tránh khi xử lý các ngoại lệ Java. Điều đó giúp bạn tránh các lỗi phổ biến và triển khai các ứng dụng dễ bảo trì và giám sát trong sản xuất.

Xử lý một ngoại lệ là một trong những phổ biến nhất nhưng không nhất thiết là một trong những nhiệm vụ dễ nhất. Nó vẫn là một trong những chủ đề được thảo luận thường xuyên trong các đội có kinh nghiệm, và có một số thực tiễn tốt nhất và các lỗi phổ biến bạn nên biết.

Sai lầm 1: Chỉ định java.lang.Exception hoặc java.lang.Throwable
Như tôi đã giải thích trong một trong những bài viết trước đây của tôi , bạn cần chỉ định hoặc xử lý một ngoại lệ được kiểm tra. Nhưng các trường hợp ngoại lệ được kiểm tra không phải là trường hợp duy nhất bạn có thể chỉ định. Bạn có thể sử dụng bất kỳ lớp con nào của java.lang.Throwable trong mệnh đề ném. Vì vậy, thay vì chỉ định hai ngoại lệ khác nhau được đưa ra bởi đoạn mã sau, bạn chỉ có thể sử dụng java.lang.Exception trong mệnh đề ném.
Nhưng điều đó không có nghĩa là bạn nên làm điều đó. Việc chỉ định một Ngoại lệ hoặc Ném có thể khiến bạn gần như không thể xử lý chúng đúng cách khi gọi phương thức của bạn.
Thông tin duy nhất mà người gọi phương thức của bạn nhận được là có gì đó không ổn. Nhưng bạn không chia sẻ bất kỳ thông tin nào về loại sự kiện đặc biệt có thể xảy ra. Bạn đang che giấu thông tin này đằng sau một điều khoản ném không đặc biệt.
Nó thậm chí còn tồi tệ hơn khi ứng dụng của bạn thay đổi theo thời gian. Mệnh đề ném không đặc hiệu che giấu tất cả các thay đổi đối với các ngoại lệ mà người gọi phải mong đợi và xử lý. Điều đó có thể gây ra một số lỗi không mong muốn mà bạn cần tìm trong trường hợp kiểm tra thay vì lỗi trình biên dịch.
Sai lầm 2: Bắt ngoại lệ không đặc hiệu
Mức độ nghiêm trọng của lỗi này phụ thuộc vào loại thành phần phần mềm bạn đang triển khai và nơi bạn bắt ngoại lệ. Có thể ổn khi bắt java.lang.Exception trong phương thức chính của ứng dụng Java SE của bạn. Nhưng bạn nên nắm bắt các ngoại lệ cụ thể, nếu bạn đang triển khai thư viện hoặc nếu bạn đang làm việc trên các lớp sâu hơn của ứng dụng.
Điều đó cung cấp một số lợi ích. Nó cho phép bạn xử lý mỗi lớp ngoại lệ khác nhau và nó ngăn bạn bắt ngoại lệ mà bạn không mong đợi.
Nhưng hãy nhớ rằng khối bắt đầu tiên xử lý lớp ngoại lệ hoặc một trong các siêu lớp của nó sẽ bắt được nó. Vì vậy, hãy chắc chắn để bắt lớp cụ thể nhất đầu tiên. Mặt khác, IDE của bạn sẽ hiển thị một lỗi hoặc thông báo cảnh báo cho bạn biết về một khối mã không thể truy cập .
Sai lầm 3: Đăng nhập và ném ngoại lệ
Đó là một trong những lỗi phổ biến nhất khi xử lý các ngoại lệ Java. Có vẻ hợp lý khi ghi nhật ký ngoại lệ nơi nó được ném và sau đó gửi lại cho người gọi có thể thực hiện xử lý trường hợp sử dụng cụ thể. Nhưng bạn không nên làm điều đó vì ba lý do sau:
Bạn không có đủ thông tin về trường hợp sử dụng mà người gọi phương thức của bạn muốn thực hiện. Ngoại lệ có thể là một phần của hành vi dự kiến và được xử lý bởi khách hàng. Trong trường hợp này, có thể không cần phải đăng nhập nó. Điều đó sẽ chỉ thêm một thông báo lỗi sai vào tệp nhật ký của bạn cần được lọc bởi nhóm hoạt động của bạn.
Thông điệp tường trình không cung cấp bất kỳ thông tin nào chưa phải là một phần của ngoại lệ. Thông điệp và dấu vết ngăn xếp của nó sẽ cung cấp tất cả thông tin liên quan về sự kiện đặc biệt. Thông báo mô tả nó và theo dõi ngăn xếp chứa thông tin chi tiết về lớp, phương thức và dòng mà nó xảy ra.
Bạn có thể đăng nhập cùng một ngoại lệ nhiều lần khi bạn đăng nhập vào mỗi khối bắt được nó. Điều đó làm rối loạn các số liệu thống kê trong công cụ giám sát của bạn và làm cho tệp nhật ký khó đọc hơn cho các hoạt động và nhóm phát triển của bạn.
Sai lầm 4: Sử dụng ngoại lệ để kiểm soát dòng chảy
Sử dụng các ngoại lệ để kiểm soát luồng ứng dụng của bạn được coi là một mô hình chống vì hai lý do chính:
Về cơ bản, chúng hoạt động giống như một câu lệnh Go To vì chúng hủy bỏ việc thực thi khối mã và nhảy đến khối bắt đầu tiên xử lý ngoại lệ. Điều đó làm cho mã rất khó đọc.
Chúng không hiệu quả như các cấu trúc điều khiển chung của Java. Như tên của chúng chỉ ra, bạn chỉ nên sử dụng chúng cho các sự kiện đặc biệt và JVM không tối ưu hóa chúng theo cùng một cách với mã khác.
Vì vậy, tốt hơn nên sử dụng các điều kiện thích hợp để phá vỡ các vòng lặp của bạn hoặc câu lệnh if-other- để quyết định khối mã nào sẽ được thực thi.

Share:

ĐỐI TÁC LIÊN KẾT TUYỂN DỤNG NHÂN SỰ CỦA IMIC TECHNOLOGY

IMIC Technology

IMIC Technology tự hào là doanh nghiệp đầu tiên tại Việt Nam triển khai các Chương trình Đào tạo chuyên môn dự án cho Học viên ngành CNTT/CNPM. Cũng là một trong những doanh nghiệp đạt được nhiều giải thưởng lớn trong lĩnh vực này. Góp phần phát triển mạnh ngành CNTT/CNPM tại nước ta hiện nay.