Tìm hiểu khái niệm exception trong java

Chào mừng các bạn đã trở lại với thachleblog. Một trong những vấn đề mà sau khi ra trường mình còn khá là mù mờ đó là Exception. Exception là gì? Exception gồm những loại nào? Sao phải sử dụng Exeption? Hy vọng sau khi đọc bài viết này, các bạn có thể trả lời được các câu hỏi trên. Nào chúng ta cùng bắt đầu nhé.

Giới thiệu

Exception là các trường hợp xảy ra không đúng như tiến trình bình thường khi chương trình chạy.

Ví dụ

Bạn đi rút tiền tại cây ATM, tiến trình bình thường là bạn đưa thẻ vào khe nhận thẻ, nhập mật khẩu, nhập số tiền cần rút, nhận tiền. Exception ở đây có thể là bạn đưa thẻ vào ngược chiều, nhập sai mật khẩu, nhập số tiền không hợp lệ hoặc máy lỗi máy không xử lý được…

Nguyên nhân gây ra exception có thể phát sinh từ nhiều lý do như người dùng nhập dữ liệu không hợp lệ, network bị down dẫn đến không send/receive được data hoặc có thể là hết bộ nhớ dẫn đến lỗi… những vấn đề phát sinh này nếu không được xử lý sẽ làm cho chương trình terminate.

Do đó đó, việc lường trước và xử lý các exception trong một chương trình là rất quan trọng. Bài viết hôm nay mình sẽ trình bày về các loại exception và cách xử lý exception trong Java.

Dựa vào đặc điểm của các exception mà ta có thể chia thành 3 loại:

  • Checked exception: exception xảy ra trong quá trình biên dịch (compile),             ex: lỗi không tìm thấy file (IOException), lỗi không tìm thấy class (ClassNotFoundException) …
  • Unchecked exception: exception xảy ra trong quá trình chương trình đang thực thi (run time)                                                                                                               ex: lỗi chia cho 0 (ArithmeticException), lỗi format số (NumberFormatException)…
  • Error là những vấn đề khác phát sinh trong quá trình chương trình đang chạy như lỗi JVM (VirtualMachineError), hết bộ nhớ (OutOfMemmoryError) …

exception trong java

Sơ đồ phân cấp exception class, nguồn

Điều gì xảy ra có Exception?

Khi trong một method xảy ra exception, method đó sẽ tạo exception object và “chuyển” cho hệ thống xử lý, hệ thống sẽ search trên call stack của method để tìm exception handler thích hợp, và nếu không tìm được exception handler thích hợp trên call stack, runtime system sẽ sử dụng exception handler mặc định để throw exception và chương trình bị terminate.

Ví dụ, chương trình chia 2 số nguyên, trong trường hợp số bị chia là 0, chương trình văng ra exception và bị terminate.

exception-example

Vậy làm thế nào để xử lý exception?

Trong Java, để xử lý exception ta có thể dùng các cách sau:

  • Catch Exception với try – catch: try block chứa đoạn code có thể gây ra exception, catch block sẽ xử lý đoạn exception xảy ra trong try block. Sử dụng try block phải sử dụng catch block hoặc finally block hoặc cả 2, chỉ sử dụng try block sẽ gây ra lỗi compile.

try-catch exception.jpg

Ví dụ về sử dụng try – catch

Lưu ý: try – cach với finlly: block code bên trong finally sẽ luôn luôn được thực thi, ta có thể dùng trường hợp clean up data sau try – cach hoặc các hoặc close conection… các công việc mà sẽ luôn được thực hiện dù tiến trình bình thường hay có exception

  • Throw Exception với throw hoặc throws: nếu exception xảy ra mà ta không sử dụng try – catch trực tiếp ở method đó, ta có dùng throw hoặc throws để throw exception và tiến hành catch ở nơi gọi method. Bằng cách này ta có thể xử lý exception tập trung hơn.

throw

Ví dụ về sử dụng throw, lúc này, ta có thể catch exception ở main

Lưu ý: về best practice trong xử lý exception, luôn luôn ghi exception message ra log để tiện trace khi có lỗi. Không nên bỏ qua excetion.

Qua phần vừa rồi hy vọng các bạn sẽ hiểu rõ về exception và cách để handle exception. Đối với các loại Exception đã được Java define sẵn, chúng ta sẽ dễ dàng sử dụng, vậy chúng ta có thể define được Exception không? Và define như thế nào. Mình sẽ tiếp tục ở phần 2. Các bạn nhớ đón đọc nhé.

Rất mong nhận được ý kiến đóng góp của các bạn.
Xin cảm ơn.

Tham khảo thêm:
http://www.javatpoint.com/exception-handling-in-java
http://www.tutorialspoint.com/java/java_exceptions.htm

4 thoughts on “Tìm hiểu khái niệm exception trong java

  1. Pingback: Exceptions trong Java (phần 2) Exceptions là gì? – thachleblog | Java Technologies

  2. Pingback: Exceptions (phần 2) | Lợi ích của việc sử dụng exception – handling trong Java? – thachleblog | Java Technologies

  3. Pingback: Serializable và Deserializable trong Java – thachleblog | Java Technologies

  4. Pingback: Lợi ích của việc sử dụng exception - handling trong Java? » Thach Le

Tham gia bình luận