Java 2 cách kiểm tra lỗi file không đọc được
Lập trình viên, đặc biệt là lập trình viên .NET và Java thì không ai không biết đến Exceptions (ngoại lệ), và "bắt" Exceptions thế nào. Nhưng không phải ai cũng biết JVM xử lý Exceptions ra sao, lợi ích của Exceptions và tác hại của việc xử dụng try-catch để bắt Exceptions. Show
Exceptions là một sự kiện xảy ra khi một chương trình đang chạy (thực thi), sự kiện đó làm cho luồng xử lý thông thường của chương trình không thể thực hiện một cách bình thường, thậm chí chết chương trình. Trong Java có 3 loại exception là Error, checked exception, và unchecked exception (runtime exception).
1. JVM xử lý Exceptions thế nàoKhi một method xảy ra ngoại lệ, trước tiên JVM tìm xử lý ngoại lệ phù hợp được xử dụng tại method ấy. Nếu không có thì JVM tiếp tục tìm xử lý ngoại lệ phù hợp ở các method trên (là method gọi lớp hiện tại). Nếu không có method nào có xử lý ngoại lệ phù hợp thì Thread mà đang thực hiện chuỗi method xảy ra ngoại lệ bị ngắt. Nếu thread ấy là thread main thì chết chương trình. 2. Lợi ích của Exceptions2.1 Giúp tổ chức source code trong việc phát hiện, xử lý lỗi một cách hiệu quảXét method
Trên là method đọc và xử lý file một cách đơn giản, nhưng nó đã bỏ qua các lỗi tiềm ẩn như: lỗi khi mở file, lỗi xác định kích thước file, lỗi tràn bộ nhớ, lỗi không đọc được file, lỗi không thể đóng file. Nếu bắt và xử lý lỗi theo cách "truyền thống" thì method
Ta nhận thấy ngay rằng method trên được viết rất dài, rối ren vì các cặp điều kiện if-else. Exceptions cho phép ta viết code xử lý luồng logic chính một cách liền mạch, khiến code trở nên đơn giản, dễ đọc hơn.
Một lưu ý nhỏ là cả hai cách viết code trên giống nhau về performance. 2.2 Giúp việc tùy chọn "nơi" xử lý lỗi một cách linh hoạt trong việc gọi các method lồng nhauGiả xử method
Nếu các method
2,
3 không quan tâm đến việc xử lý lỗi khi method
5 thì
2,
3 chỉ việc "forward" ngoại lệ cho các method phía trên như sau.
2.3 Giúp gộp nhóm hoặc tạo ngoại lệ mới theo mục đích của programmerException trong Java cũng là Object nghĩa là có class type của exception. Và mọi exception đều được extands từ class gốc là Excetpion.class
Vẫn là ví dụ về đọc file trong Java. Ta phải bắt 2 checked exception là
8 (lỗi không tìm thấy file) và
9 (lỗi không đọc được file). Thông thường code được tổ chức như sau.
Vì
8 là lớp con của
9 nên ta có thể gộp việc bắt 2 ngoại lệ trên làm 1 như sau.
Hoặc ta có thể không xử lý ngoại lệ tại method
Trong ví dụ trên tất nhiên class
3 được extends từ class
4. 3. Bất lợi của việc sử dụng try-catch để bắt exceptionsCái bất lợi ở đây ám chỉ sử dụng try-catch để bắt unchecked exceptions, vì các checked exceptions thì bắt buộc ta phải sử dụng. Tôi không tìm thấy bài viết, tài liệu nào nói về disadvantages của việc sử dụng try-catch block. Trong công việc thực tế tôi thấy có điểm bất lợi đó là khi ta xử dụng try-catch sai mục đích, đó là. |