在上一个教程中,我们学习了 Java 异常。我们知道异常会异常地终止程序的执行。
因此,处理异常非常重要。以下是处理 Java 中异常的不同方法列表。
- try...catch 块
- finally 块
- throw 和 throws 关键字
1. Java try...catch 块
try-catch 块用于处理 Java 中的异常。以下是 try...catch 块的语法
try {
// code
}
catch(Exception e) {
// code
}
在这里,我们将可能生成异常的代码放在 try 块中。每个 try 块后面都跟着一个 catch 块。
当发生异常时,它会被 catch 块捕获。catch 块不能在没有 try 块的情况下使用。
示例:使用 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());
}
}
}
输出
ArithmeticException => / by zero
在示例中,我们尝试将一个数除以 0。这里的代码会生成一个异常。
为了处理异常,我们将代码 5 / 0 放入 try 块中。现在,当发生异常时,try 块中剩余的代码将被跳过。
catch 块捕获异常,并执行 catch 块内的语句。
如果 try 块中的任何语句都没有生成异常,则会跳过 catch 块。
2. Java finally 块
在 Java 中,无论是否发生异常,finally 块始终会执行。
finally 块是可选的。并且,对于每个 try 块,只能有一个 finally 块。
finally 块的基本语法是
try {
//code
}
catch (ExceptionType1 e1) {
// catch block
}
finally {
// finally block always executes
}
如果发生异常,finally 块将在 try...catch 块之后执行。否则,它将在 try 块之后执行。对于每个 try 块,只能有一个 finally 块。
示例:使用 finally 块进行 Java 异常处理
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");
}
}
}
输出
ArithmeticException => / by zero This is the finally block
在上面的示例中,我们在 try 块中将一个数除以 0。这里的代码会生成一个 ArithmeticException。
异常被 catch 块捕获。然后执行 finally 块。
3. Java throw 和 throws 关键字
Java throw 关键字用于显式地抛出单个异常。
当我们 throw 一个异常时,程序的流程会从 try 块转移到 catch 块。
示例:使用 Java throw 进行异常处理
class Main {
public static void divideByZero() {
// throw an exception
throw new ArithmeticException("Trying to divide by 0");
}
public static void main(String[] args) {
divideByZero();
}
}
输出
Exception in thread "main" java.lang.ArithmeticException: Trying to divide by 0
at Main.divideByZero(Main.java:5)
at Main.main(Main.java:9)
在上面的示例中,我们使用 throw 关键字显式地抛出了 ArithmeticException。
类似地,throws 关键字用于声明可能在方法内发生的异常类型。它用于方法声明。
示例:Java throws 关键字
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);
}
}
}
输出
java.io.FileNotFoundException: test.txt (The system cannot find the file specified)
当我们运行此程序时,如果文件 test.txt 不存在,FileInputStream 会抛出 FileNotFoundException,它继承自 IOException 类。
findFile() 方法指定可以抛出 IOException。main() 方法调用此方法并在抛出异常时对其进行处理。
如果方法不处理异常,那么其中可能发生的异常类型必须在 throws 子句中指定。
要了解更多信息,请访问 Java throw 和 throws。