java如何catch
捕获异常的基本语法
在Java中,使用try-catch块捕获异常。try块包含可能抛出异常的代码,catch块用于处理捕获的异常。基本语法如下:
try {
// 可能抛出异常的代码
} catch (ExceptionType e) {
// 处理异常的代码
}
捕获特定异常
可以指定具体的异常类型(如NullPointerException、ArrayIndexOutOfBoundsException),仅捕获目标异常:
try {
String str = null;
System.out.println(str.length());
} catch (NullPointerException e) {
System.out.println("捕获到空指针异常: " + e.getMessage());
}
捕获多个异常
通过多个catch块分别处理不同类型的异常,或使用|合并捕获:

try {
int[] arr = new int[5];
arr[10] = 1; // ArrayIndexOutOfBoundsException
} catch (NullPointerException e) {
System.out.println("空指针异常");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("数组越界异常");
}
// Java 7+ 支持多异常合并捕获
try {
// 可能抛出多种异常的代码
} catch (NullPointerException | ArrayIndexOutOfBoundsException e) {
System.out.println("捕获到异常: " + e.getClass().getSimpleName());
}
捕获所有异常
使用Exception类捕获所有可能的异常(不推荐过度使用,可能掩盖潜在问题):
try {
// 可能抛出异常的代码
} catch (Exception e) {
System.out.println("捕获到异常: " + e.getMessage());
}
使用finally块
finally块无论是否发生异常都会执行,常用于资源清理(如关闭文件流):

try {
// 可能抛出异常的代码
} catch (Exception e) {
System.out.println("异常处理");
} finally {
System.out.println("最终执行块");
}
自定义异常处理
通过继承Exception或RuntimeException创建自定义异常,并在catch中处理:
class CustomException extends Exception {
public CustomException(String message) {
super(message);
}
}
try {
throw new CustomException("自定义异常示例");
} catch (CustomException e) {
System.out.println(e.getMessage());
}
异常链与重新抛出
捕获异常后可通过throw重新抛出,或使用initCause()关联异常原因:
try {
// 可能抛出异常的代码
} catch (IOException e) {
throw new RuntimeException("高层异常", e); // 包装原始异常
}
注意事项
- 避免空的
catch块,否则会隐藏错误。 - 优先捕获具体异常而非通用的
Exception。 - 使用
try-with-resources自动管理资源(Java 7+):try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) { // 自动关闭资源 } catch (IOException e) { e.printStackTrace(); }






