Xử lý ngoại lệ trong Java (Với các ví dụ)

Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các phương pháp xử lý ngoại lệ khác nhau trong Java với sự trợ giúp của các ví dụ.

Trong hướng dẫn trước, chúng ta đã tìm hiểu về các ngoại lệ của Java. Chúng tôi biết rằng các trường hợp ngoại lệ chấm dứt việc thực thi một chương trình một cách bất thường.

Đây là lý do tại sao điều quan trọng là phải xử lý các trường hợp ngoại lệ. Dưới đây là danh sách các cách tiếp cận khác nhau để xử lý các ngoại lệ trong Java.

  • thử… bắt khối
  • cuối cùng chặn
  • từ khóa ném và ném

1. Java try… bắt khối

Khối try-catch được sử dụng để xử lý các ngoại lệ trong Java. Đây là cú pháp của try… catchkhối:

 try ( // code ) catch(Exception e) ( // code )

Ở đây, chúng tôi đã đặt mã có thể tạo ra một ngoại lệ bên trong trykhối. Mỗi trykhối được theo sau bởi một catchkhối.

Khi một ngoại lệ xảy ra, nó sẽ bị chặn bởi catchkhối. Các catchkhối không thể được sử dụng mà không có trykhối.

Ví dụ: Xử lý ngoại lệ bằng try… catch

 class Main ( public static void main(String() args) ( try ( // code that generate exception int divideByZero = 5 / 0; System.out.println("Rest of code in try block"); ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) ) )

Đầu ra

 ArithmeticException => / bằng 0

Trong ví dụ, chúng tôi đang cố gắng chia một số cho 0. Ở đây, mã này tạo ra một ngoại lệ.

Để xử lý ngoại lệ, chúng tôi đã đặt mã, 5 / 0bên trong trykhối. Bây giờ khi một ngoại lệ xảy ra, phần còn lại của mã bên trong trykhối sẽ bị bỏ qua.

Các catchkhối bắt ngoại lệ và báo cáo bên trong khối catch được thực thi.

Nếu không có câu lệnh nào trong trykhối tạo ra ngoại lệ, catchkhối đó sẽ bị bỏ qua.

2. Java cuối cùng khối

Trong Java, finallykhối luôn được thực thi bất kể có ngoại lệ hay không.

Các finallykhối là không bắt buộc. Và, đối với mỗi trykhối, chỉ có thể có một finallykhối.

Cú pháp cơ bản của finallykhối là:

 try ( //code ) catch (ExceptionType1 e1) ( // catch block ) finally ( // finally block always executes )

Nếu một ngoại lệ xảy ra, finallykhối sẽ được thực thi sau try… catchkhối. Nếu không, nó được thực thi sau khối try. Đối với mỗi trykhối, chỉ có thể có một finallykhối.

Ví dụ: Xử lý ngoại lệ trong Java sử dụng khối cuối cùng

 class Main ( public static void main(String() args) ( try ( // code that generates exception int divideByZero = 5 / 0; ) catch (ArithmeticException e) ( System.out.println("ArithmeticException => " + e.getMessage()); ) finally ( System.out.println("This is the finally block"); ) ) )

Đầu ra

 ArithmeticException => / by zero Đây là khối cuối cùng

Trong ví dụ trên, chúng ta đang chia một số cho 0 bên trong trykhối. Ở đây, mã này tạo ra một ArithmeticException.

Ngoại lệ được chặn bởi catchkhối. Và, sau đó finallykhối được thực thi.

Lưu ý : Đó là một thực hành tốt để sử dụng finallykhối. Đó là vì nó có thể bao gồm các mã dọn dẹp quan trọng như,

  • mã có thể vô tình bị bỏ qua khi trả về, tiếp tục hoặc ngắt
  • đóng tệp hoặc kết nối

3. Từ khóa ném và ném trong Java

throwTừ khóa Java được sử dụng để ném một ngoại lệ rõ ràng.

Khi chúng ta throwmột ngoại lệ, luồng chương trình sẽ di chuyển từ trykhối này sang catchkhối khác.

Ví dụ: Xử lý ngoại lệ bằng Java ném

 class Main ( public static void divideByZero() ( // throw an exception throw new ArithmeticException("Trying to divide by 0"); ) public static void main(String() args) ( divideByZero(); ) )

Đầu ra

 Ngoại lệ trong chuỗi "main" java.lang.ArithmeticException: Đang cố gắng chia cho 0 tại Main.divideByZero (Main.java:5) tại Main.main (Main.java:9)

Trong ví dụ trên, chúng ta đang ArithmeticExceptionsử dụng throwtừ khóa một cách rõ ràng .

Tương tự, throwstừ khóa được sử dụng để khai báo loại ngoại lệ có thể xảy ra trong phương thức. Nó được sử dụng trong khai báo phương thức.

Ví dụ: Từ khóa ném Java

 import java.io.*; class Main ( // declareing the type of exception public static void findFile() throws IOException ( // code that may generate IOException File newFile = new File("test.txt"); FileInputStream stream = new FileInputStream(newFile); ) public static void main(String() args) ( try ( findFile(); ) catch (IOException e) ( System.out.println(e); ) ) )

Đầu ra

 java.io.FileNotFoundException: test.txt (Hệ thống không thể tìm thấy tệp được chỉ định)

Khi chúng tôi chạy chương trình này, nếu tệp test.txt không tồn tại, hãy FileInputStreamném a FileNotFoundExceptionmở rộng IOExceptionlớp.

Các findFile()phương pháp xác định rằng một IOExceptioncó thể được ném. Các main()phương pháp gọi phương pháp này và xử lý các ngoại lệ nếu nó được ném.

Nếu một phương thức không xử lý các ngoại lệ, thì loại ngoại lệ có thể xảy ra trong nó phải được chỉ định trong throwsmệnh đề.

Để tìm hiểu thêm, hãy truy cập Java ném và ném.

thú vị bài viết...