Java中try-catch怎么用_Java try-catch结构使用方法详解

Java中try-catch用于捕获处理运行时异常,避免程序意外终止;需将可能出错代码放入try块,对应处理逻辑写在catch块,finally用于资源清理;多catch时子类异常须在父类前;JDK 7+推荐try-with-resources。

Java中try-catch用于捕获并处理运行时可能出现的异常,避免程序因未处理的异常而意外终止。核心是把可能出错的代码放进try块,把应对措施写在catch块里,必要时用finally做收尾工作。

基本语法结构要写全

一个完整的try-catch至少包含try和至少一个catchfinally可选但建议在需要资源清理时加上:

  • try块里只能放可能抛异常的语句,不能为空
  • 每个catch必须声明具体异常类型,不能写泛泛的Exception就完事(除非真要兜底)
  • 多个catch时,子类异常要写在父类前面,否则编译报错
  • finally总会执行(除非JVM退出),适合关文件、释放连接等操作

常见写法示例

比如读取文件内容,容易遇到FileNotFoundExceptionIOException

FileReader reader = null;
try {
    reader = new FileReader("data.txt");
    int ch = reader.read();
    System.out.println((char)ch);
} catch (FileNotFoundException e) {
    System.err.println("文件没找到:" + e.getMessage());
} catch (IOException e) {
    System.err.println("读取出错:" + e.getMessage());
} finally {
    if (reader != null) {
        try {
            reader.close();
        } catch (IOException ignored) {}
    }
}

注意:JDK 7+推荐用try-with-resources自动关流,更简洁安全。

什么时候该用try-catch

不是所有地方都要加,重点处理那些你预判可能发生、且能合理响应的异常:

  • 部依赖操作:文件读写、网络请求、数据库查询
  • 用户输入解析:字符串转数字、日期格式转换
  • 数组/集合访问:下标越界、空指针风险高的场景
  • 不要用它来替代逻辑判断,比如用catch(ArrayIndexOutOfBoundsException)代替if (i

别踩这些坑

实际编码中容易忽略的关键细节:

  • catch里只打印异常却不处理,等于“假装看见了”,问题还在
  • 吞掉异常(空catch块)会让调试变得极其困难
  • catch里又抛新异常时,记得用throw new XxxException("msg", e)保留原始堆栈
  • 不要在finally里写return,它会覆盖trycatch中的返回值

基本上就这些。用对try-catch不是为了“让代码不报错”,而是让错误发生时,程序还能按你的意图继续运转或优雅退出。