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.
- try…catch block
- finally block
- throw and throws keyword
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...catch
khố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 try
khối. Mỗi try
khối được theo sau bởi một catch
khối.
Khi một ngoại lệ xảy ra, nó sẽ bị chặn bởi catch
khối. Các catch
khối không thể được sử dụng mà không có try
khố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 => / by zero
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 / 0
bên trong try
khố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 try
khối sẽ bị bỏ qua.
Các catch
khố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 try
khối tạo ra ngoại lệ, catch
khối đó sẽ bị bỏ qua.
2. Cuối cùng thì khối Java
Trong Java, finally
khối luôn được thực thi bất kể có ngoại lệ hay không.
Các finally
khối là không bắt buộc. Và, đối với mỗi try
khối, chỉ có thể có một finally
khối.
Cú pháp cơ bản của finally
khối là:
try {
//code
}
catch (ExceptionType1 e1) {
// catch block
}
finally {
// finally block always executes
}
Nếu một ngoại lệ xảy ra, finally
khối sẽ được thực thi sau try...catch
khối. Nếu không, nó được thực thi sau khối try. Đối với mỗi try
khối, chỉ có thể có một finally
khố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 This is the finally block
Trong ví dụ trên, chúng ta đang chia một số cho 0 bên trong try
khối. Ở đây, mã này tạo ra một ArithmeticException
.
Ngoại lệ được chặn bởi catch
khối. Và, sau đó finally
khối được thực thi.
Lưu ý : Đó là một thực hành tốt để sử dụng finally
khối. Đó là vì nó có thể bao gồm các mã dọn dẹp quan trọng như,
- code that might be accidentally skipped by return, continue or break
- closing a file or connection
3. Từ khóa ném và ném trong Java
throw
Từ khóa Java được sử dụng để đưa ra một ngoại lệ rõ ràng.
Khi chúng ta throw
một ngoại lệ, luồng chương trình sẽ di chuyển từ try
khối này sang catch
khố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
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0 at Main.divideByZero(Main.java:5) at Main.main(Main.java:9)
Trong ví dụ trên, chúng ta đang ArithmeticException
sử dụng throw
từ khóa một cách rõ ràng .
Tương tự, throws
từ 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 (The system cannot find the file specified)
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 FileInputStream
ném a FileNotFoundException
mở rộng IOException
lớp.
Các findFile()
phương pháp xác định rằng một IOException
có 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ỉ rõ trong throws
mệnh đề.
Để tìm hiểu thêm, hãy truy cập Java ném và ném .