So sánh checked và unchecked exception trong java

CheckedException

CheckedException là những exception có thể nhìn thấy và kiểm tra tại thời điểm biên dịch. Nếu trong code có bất kỳ method nào ném CheckedException thì chúng ta phải xử lý chúng hoặc sử dụng từ khoá throwsđẩy lên cho method tầng trên xử lý[các method khác sử dụng chúng].

import java.io.*; class Main { public static void main[String[] args] { BufferedReader fileInput = null; FileReader file = new FileReader["C:\\test\\a.txt"]; fileInput = new BufferedReader[file]; // Print first 3 lines of file "C:\test\a.txt" for [int counter = 0; counter < 3; counter++] System.out.println[fileInput.readLine[]]; fileInput.close[]; } }

Output

Exception in thread “main” java.lang.RuntimeException: Uncompilable source code – unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown at Main.main[Main.java:5]

Ở đoạn code ở trên chương trình sẽ tiến hành mở file và in ra màn hình 3 dòng đầu tiên của file a.txt. Thế nhưng khi compile sẽ bị lỗi vì constructor FileReader[]ném checked exception FileNotFoundException, readLine[]close[] cũng ném IOException.

Để sửa đoạn code trên chúng ta 2 cách:

  • Sử dụng try-catch
  • Sử dụng khoá throws

Sử dụng try-catch để xử lý checkedException

Sử dụng try-catchbao bên ngoài khối lệnh có thể ném ra exception. Khi có một exception xảy ra trong khối lệnh trychúng sẽ được xử lý trong khối lệnh catch. Ở đây mình chỉ xử lý đơn giản là in ra màn lỗi.

import java.io.*; class Main { public static void main[String[] args] { BufferedReader fileInput = null; try { FileReader file = new FileReader["C:\\test\\a.txt"]; fileInput = new BufferedReader[file]; // Print first 3 lines of file "C:\test\a.txt" for [int counter = 0; counter < 3; counter++] System.out.println[fileInput.readLine[]]; fileInput.close[]; } catch [FileNotFoundException e] { System.out.println["FileNotFoundException roi!!!"]; e.printStackTrace[]; } catch [IOException e] { System.out.println["IOException roi!!!"]; e.printStackTrace[]; } } }

Vì trong khối lệnh trycó thể ném ra đến 2 exception là IOException và FileNotFoundException nên chúng ta phải xử lý cho từng Exception một. Lưu ý thứ tự catch Exception trên là bắt buộc vì FileNotFoundException là một subclass của IOException, khối lệnh catch sẽ kiểm tra từ trên xuống khi chúng thấy một exception nào hợp lệ thì các khối catch bên dưới sẽ không được thực thi. Vì FileNotFoundException là subclass của IOException nên để phía sau thì nó sẽ khiến cho FileNotFoundException không bao giờ được thực hiện.

Sử dụng từ khoá throws để xử lý CheckedException

Sử dụng từ khoá throws liệt kê tất cả các exception có thể xảy ra bên trong method. Các method khác khi sử dụng method này phải xử lý các exception được chỉ định với từ khoá throws. Cách xử lý cũng tương tự có 2 cách là try-catchthrows. Nếu đến cuối cùng vẫn không có method này xử lý các exception được ném ra thì chương trình sẽ báo lỗi đến người dùng và có thể gây crash chương trình, đây là điều tối kỵ đối với một ứng dụng.

import java.io.*; class Main { public static void main[String[] args] throws IOException{ BufferedReader fileInput = null; FileReader file = new FileReader["C:\\test\\a.txt"]; fileInput = new BufferedReader[file]; // Print first 3 lines of file "C:\test\a.txt" for [int counter = 0; counter < 3; counter++] System.out.println[fileInput.readLine[]]; fileInput.close[]; } } }

Chúng ta chỉ cần throws IOException vì nó đã bao gồm FileNotFoundException.

Exception là gì?

Theo từ điển: Exception [ngoại lệ] là một tình trạng bất thường.

Trong java, ngoại lệ là một sự kiện làm gián đoạn luồng bình thường của chương trình. Nó là một đối tượng được ném ra tại runtime.

Exception Handling là gì?

Exception Handling [xử lý ngoại lệ] là một cơ chế xử lý các lỗi runtime như ClassNotFound, IO, SQL, Remote, vv

Lợi thế của Exception Handling trong java

Lợi thế cốt lõi của việc xử lý ngoại lệ là duy trì luồng bình thường của ứng dụng. Ngoại lệ thường làm gián đoạn luồng bình thường của ứng dụng đó là lý do tại sao chúng ta sử dụng xử lý ngoại lệ. Hãy xem xét kịch bản sau:

statement 1; statement 2; statement 3; statement 4; statement 5; //ngoại lệ xảy ra statement 6; statement 7; statement 8; statement 9; statement 10;

Giả sử có 10 câu lệnh trong chương trình của bạn và xảy ra trường hợp ngoại lệ ở câu lệnh 5, phần còn lại của chương trình sẽ không được thực thi, nghĩa là câu lệnh 6 đến 10 sẽ không chạy. Nếu chúng ta thực hiện xử lý ngoại lệ, phần còn lại của câu lệnh sẽ được thực hiện. Đó là lý do tại sao chúng ta sử dụng xử lý ngoại lệ trong java.


Hãy liệt kê sự khác nhau cơ bản giữa Checked Exception và Unchecked Exception trong Java.

Hãy liệt kê sự khác nhau cơ bản giữa hai loại Exception trong Java và Checked Exception và Uncheked Exception dựa vào các ví dụ minh họa trong phần bài học.

Bài giải

-------------------- ######## --------------------

Điểm khác biệt cơ bảngiữaChecked Exception và Unchecked Exception chính là thời điểm xác định được Exception có thể xảy ra. Đối với Checked Exception, việc kiểm tra được thực hiện ngay tại thời điểm Compile time [là thời điểm chương trình đang được biên dịch], một số IDE sẽ giúp chúng ta bằng cách hiển thị lỗi cú pháp.Còn đối với Uncheked Exception, việc xác định có Exception xảy ra hay không chỉ có thể thực hiện tại thời điểm Runtime[là thời điểm chương trình đang chạy],Exception này thường liên quan đến lỗi logic và các IDE sẽ không giúp chúng ta xác định được chuyện đó.

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Câu hỏi thường gặp liên quan:

  • Hãy liệt kê sự khác nhau cơ bản giữa Checked Exception và Unchecked Exception trong Java.

1. Exception [Ngoại lệ] là gì?

Exception là một sự kiện chỉ xảy ra trong quá trình chương trình Java thực thi một câu lệnh nào đó và thông thường nó sẽ phá vỡ luồng làm việc của chương trình, tức là chương trình đang chạy sẽ lập tức ngừng lại và xuất hiện thông báo lỗi. Đó chính là Exception [ngoại lệ].

Ví dụ dễ hiểu nhất về Exception đó chính là khi chúng ta tiến hành thực hiện phép chia một số nguyên dương cho số 0 thì khi biên dịch chương trình sẽ làm phát sinh lỗi và đó được coi là ngoại lệ.

2. Các loại Exception trong Java

Trong Java có 2 loại Exception là Checked Exception và Unchecked Exception.

  • Checked Exception là các Exception xảy ra tại thời điểm Compile time [là thời điểm chương trình đang được biên dịch]. Những Exception này thường liên quan đến lỗi cú pháp [syntax] và bắt buộc chúng ta phải "bắt" [catch] nó.
  • Unchecked Exception: là các Exception xảy ra tại thời điểm Runtime [là thời điểm chương trình đang chạy]. Những Exception này thường liên quan đến lỗi logic và không bắt buộc chúng ta phải "bắt" [catch] nó.

Sau đây tôi sẽ đưa ra 2 ví dụ minh họa Checked Exception và Unchecked Exception:

CheckedException.java

package vidu; public class CheckedException { public static void main[String[] args] { System.out.println[ABC]; } }

Lúc này, ngay tại dòng code System.out.println[ABC]; sẽ bị lỗi. Lý do là vì ví dụ này mục đích là để hiển thị một chuỗi, mà đã hiển thị chuỗi thì bắt buộc chuỗi đó phải nằm trong cặp dấu " ". Đây chính là Checked Exception, lúc này nếu chúng ta tiến hành chạy chương trình thì sẽ có thông báo lỗi hiển thị trong cửa sổ Console. Kết quả biên dịch chương trình như sau:

UncheckedException.java

package vidu; public class UncheckedException { public static void main[String[] args] { int a = 5, b = 0; System.out.println[a/b]; } }

Lúc này, chương trình sẽ không báo lỗi gì trong đoạn code của chúng ta nhưng khi biên dịch thì sẽ có thông báo lỗi "/ by zero" [lỗi chia cho 0] trong màn hình Console. Đây chính là Unchecked Exception. Kết quả sau khi biên dịch chương trình:

Sự khác biệt giữa ngoại lệ được kiểm tra và không được kiểm tra trong Java

Sự khác biệt giữa ngoại lệ được kiểm tra và không được kiểm tra trong Java - Công Nghệ

Exception là gì?

Ý nghĩa trong từ điển: Exception là một tình trạng bất thường.

  • Cách đọc UML Class Diagram
  • Tại sao Java không có cơ chế để Override thuộc tính của instance
  • Top 10 khóa học lập trình Java online dành cho người mới bắt đầu
  • Các phương pháp tự học lập trình web trực tuyến tốt nhất
  • Tổng hợp các khóa học lập trình web online free từ cơ bản đến nâng cao

Trong Java, Exception là một sự kiện mà phá vỡ luồng chuẩn của chương trình. Nó là một đối tượng mà được ném tại Runtime. Một exception [ngoại lệ] trong Java là một vấn đề xảy ra trong quá trình thực hiện của chương trình. Một ngoại lệ có thể xảy ra với nhiều lý do khác nhau, như dưới đây:

  • Người dùng nhập dữ liệu không hợp lệ.
  • Một file cần được mở nhưng không thể tìm thấy.
  • Kết nối mạng bị ngắt trong quá trình thực hiện giao tiếp hoặc JVM hết bộ nhớ.

Một vài những ngoại lệ xảy ra bởi lỗi của người dùng, một số khác bởi lỗi của lập trình viên và số khác nữa đến từ lỗi của nguồn dữ liệu vật lý.

Để hiểu về cách xử lý ngoại lệ trong Java, bạn cần phải hiểu những loại ngoại lệ như sau:

Checked Exception

Checked Exception: Là ngoại lệ thường xảy ra do người dùng mà không thể lường trước được bởi lập trình viên. Ví dụ, một file được mở, nhưng file đó không thể tìm thấy và ngoại lệ xảy ra. Những ngoại lệ này không thể được bỏ qua trong quá trình biên dịch. Checked Exception là các lớp mà kế thừa lớp Throwable ngoại trừ RuntimeException và Error. Ví dụ như IOException, SQLException, … Checked Exception được kiểm tra tại thời gian biên dịch compile-time.

Unchecked Exception

Unchecked Exception: Một ngoại lệ xảy ra ở runtime là ngoại lệ có thể tránh được bởi lập trình viên. Unchecked Exception là các lớp kế thừa RuntimeException, ví dụ ArithmaticException, NullPointerException, ArrayIndexOutOfBoundsException, … Unchecked Exception không được kiểm tra tại compile-time, thay vào đó chúng được kiểm tra tại runtime.

Error

Error: Nó không giống các exception, nhưng vấn đề xảy ra vượt quá tầm kiểm soát của lập trình viên hay người dùng. Error được bỏ qua trong code của bạn vì bạn hiếm khi có thể làm gì đó khi chương trình bị error. Ví dụ như OutOfMemoryError, VirtualMachineError, AssertionError, … Nó được bỏ qua trong quá trình Java biên dịch.

Exception Handling

Xử lý ngoại lệ [Exception Handling] là một kỹ thuật để xử lý các Runtime Error như ClassNotFound, IO, SQL, Remote, … Lợi thế chính của xử lý ngoại lệ là để duy trì luồng chuẩn của ứng dụng. Exception thường phá vỡ luồng chuẩn của ứng dụng, và đó là tại sao chúng ta sử dụng Exception Handling.

Video liên quan

Chủ Đề