java中用try-catch捕获处理异常以避免程序终止:try块放可能出错代码,catch按异常类型处理且子类须在父类前;finally确保资源清理;推荐try-with-resources;可多catch或合并捕获;需根据场景选择throw/throws。

Java 中用 try-catch 捕获并处理运行时可能出现的异常,避免程序因未处理的错误而突然终止。
基本结构:try-catch 捕获异常
把可能抛出异常的代码放在 try 块中,对应异常类型在 catch 块中处理:
-
try块必须有,且只能有一个(可跟多个catch) -
catch后面要写具体的异常类(如IOException、NumberFormatException),不能只写Exception或空括号 - 多个
catch时,子类异常要写在父类前面,否则编译报错
示例:读取字符串转为整数,处理格式错误
String input = "abc";
try {
int num = Integer.parseInt(input);
System.out.println("解析成功:" + num);
} catch (NumberFormatException e) {
System.out.println("输入不是有效数字:" + input);
}
加上 finally 确保资源清理
finally 块无论是否发生异常都会执行,适合关闭文件、释放连接等操作:
- 即使
try或catch中有return,finally仍会先执行 - 不建议在
finally中写return,会覆盖前面的返回值 - Java 7+ 推荐用
try-with-resources自动管理实现了AutoCloseable的资源,更简洁安全
示例:手动关闭流(传统写法)
FileInputStream fis = null;
try {
fis = new FileInputStream("data.txt");
// 读取操作
} catch (IOException e) {
System.err.println("读取失败:" + e.getMessage());
} finally {
if (fis != null) {
try {
fis.close();
} catch (IOException ignored) {}
}
}
捕获多种异常的写法
一个 try 可以对应多个 catch,分别处理不同错误;Java 7 起也支持单个 catch 捕获多种异常(用 | 分隔):
- 多
catch:逻辑分离清晰,适合不同处理方式 - 多异常合并:适合统一提示或记录日志,但无法区分具体异常类型做差异化处理
示例:合并捕获 I/O 和解析异常
try {
String line = Files.readString(Paths.get("config.txt"));
int value = Integer.parseInt(line.trim());
} catch (IOException | NumberFormatException e) {
System.err.println("配置加载失败:" + e.getMessage());
}
要不要 throw 或 throws?看场景
try-catch 是“自己消化”异常;如果当前方法不适合处理,可以:
- 用
throw主动抛出新异常(常用于包装底层异常,提供更明确上下文) - 用
throws声明方法可能抛出的检查型异常(如IOException),由调用方处理 - 非检查型异常(
RuntimeException及其子类)可不声明,但建议在文档或注释中说明
示例:封装异常并重新抛出
public void loadConfig(String path) throws ConfigLoadException {
try {
String content = Files.readString(Paths.get(path));
parse(content);
} catch (IOException e) {
throw new ConfigLoadException("配置文件读取失败: " + path, e);
}
}Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











