Exception là gì? Cách quản lý lỗi tốt nhất trong Java.

1. Exception là gì?

Exception là một sự kiện xảy ra trong quá trình thực thi một chương trình Java nó làm phá vỡ cái flow bình thường của một chương trình.

Khi một lỗi xảy ra trên một method, method đó sẽ tạo ra một object và đưa nó vào Runtime System. Object đó được gọi là Exception Object, nó chứa tất cả các thông tin về lỗi và trạng thái của chương trình khi xảy ra lỗi. Sau đó Runtime System sẽ xử lý sẽ tìm cách xử lý lỗi này.

Quá trình xử lý Exception được gọi là catch Exception, nếu Runtime System không xử lý được ngoại lệ thì chương trình sẽ kết thúc.  

2. Mô hình Exception trong Java


Exception in Java


Mô hình exception trong Java


3. Các loại Exception trong Java

Trong Java có 2 loại Exception là Checked exceptionsUnChecked exceptions.


Checked exceptions:

Là loại exception xảy ra trong lúc compile time, nó cũng có thể được gọi là compile time exceptions. Loại exception này không thể bỏ qua được trong quá trình compile, bắt buộc ta phải handle nó.

Ví dụ: IOException, FileNotFoundException....

UnChecked exceptions:

Là loại exception xảy ra tại thời điểm thực thi chương trình, nó cũng có thể gọi là runtime exceptions đó là programming bugs, lỗi logic của chương trình... Loại exception này được bỏ qua trong quá trình compile, không bắt buộc ta phai handle nó.

Ví dụ: NumberFormatException, ArrayIndexOutOfBoundsException...

Errors: 

Là những vấn đề nghiêm trọng liên quan đến môi trường thực thi của ứng dụng, hệ thống. Nó thường làm chết chương trình.

Ví dụ: OutOfMemoryError, LinkageError, and StackOverflowError.

4. Cách bắt lỗi trong Java

Để bắt lỗi trong Java ta sử dụng từ khóa try - catchfinally blocks. Ta cũng có thể dùng try-with-resources có từ Java 7. try-with-resources được dùng riêng biệt trong trường hợp xử dụng Closeable resources như là streams.
Java try catch and finally

Có 2 cách xử lý lỗi trong Java là xử lý lỗi trực tiếp bằng try-catch và xử lý lỗi giáng tiếp bằng throws 

a. try-catch:

Xử lý lỗi tại chổ tại khối lệnh có thể phát sinh ra lỗi và chương trình có thể chạy tiếp những lệnh tiếp theo. Hoặc là bắt lỗi để chuyển thành một lỗi khác và đưa ra ngoài xử lý.

Cú pháp:

Single catch block
cu phap try catch java

Multiple catch blocks
cu phap try catch java


Ví dụ:

Kết quả:

Error: String index out of range: -20
After error..
continuing........

Ta thấy rằng sau khi xảy ra lỗi chương trình vẫn tiếp tục chạy những lệnh tiếp theo..

b. throws:

Là để ném lỗi ra ngoài để xử lý lỗi.. không chạy tiếp những lệnh tiếp theo trong method sau khi đã ném lỗi.

Ví dụ:


Kết quả:

Error: Get name has error..
Finish........

Ta thấy sau khi ném lỗi StringIndexOutOfBoundsException ra ngoài thì "continuing........" không được in ra.. tức là những lệnh tiếp theo không được chạy. Và lỗi này đã được đưa ra ngoài đễ xử lý.

Note: 
  • Throw: để quăng ra Exception ở bất kỳ dòng nào trong phương thức (sau đó dùng try-catch để bắt hoặc throws cho thằng khác sử lý)
  • Throws: Chỉ có phương thức mới được sử dụng. Khi một phương thức có throw bên trong mà không bắt lại (try – catch) thì phải ném đi (throws) cho thằng khác xử lý.

SHARE THIS

1 comment:

  1. Bài viết của bạn rất chi tiết và cụ thể. Thanks

    ReplyDelete