在Java中,try
代码块后可以跟随多个catch
代码块,用于捕获不同类型的异常。以下是关键要点:
一、语法结构
try {
// 可能抛出异常的代码
} catch (ExceptionType1 e1) {
// 处理ExceptionType1异常
} catch (ExceptionType2 e2) {
// 处理ExceptionType2异常
} finally {
// 无论是否抛出异常都会执行的代码
}
-
try块 :包含可能抛出异常的代码。
-
catch块 :按异常类型顺序排列,父类异常应放在子类异常之前。
-
finally块 :可选,用于资源释放等清理操作,执行顺序在所有
catch
块之后。
二、异常类型匹配规则
-
继承关系优先 :若存在父类异常和子类异常,父类异常的
catch
块需放在子类异常之前,避免异常被错误捕获。 -
顺序不可逆 :一旦匹配到某个
catch
块,后续块将不再执行。
三、注意事项
-
异常丢失风险 :若
finally
块与try
块不匹配(如finally
在catch
之前),可能导致异常未被处理。 -
返回值处理 :若
try
块为方法,返回值以finally
块后的代码为准。
四、示例
public static int divide(int num1, int num2) {
try {
return num1 / num2;
} catch (ArithmeticException e) {
System.out.println("除数不能为0!");
return 0;
} catch (Exception e) {
System.out.println("其他异常:" + e.getMessage());
return -1;
} finally {
System.out.println("执行清理操作");
}
}
- 除数为0时,会先捕获
ArithmeticException
,再执行finally
块。
通过合理使用多重捕获,可提高代码的健壮性和可维护性。