温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

检查异常如何处理

发布时间:2026-10-06 16:12:00 来源:亿速云 阅读:87 作者:小樊 栏目:编程语言

“检查异常如何处理”通常出现在 Java 异常处理 的语境中。下面系统地说明一下。


一、什么是检查异常(Checked Exception)

在 Java 中:

  • 检查异常:编译期就必须处理的异常
    继承自 Exception(但不包括 RuntimeException)
  • 常见例子:
    • IOException
    • SQLException
    • FileNotFoundException

编译器会强制你 要么捕获,要么声明抛出。


二、检查异常的处理方式

方式 1:使用 try-catch 捕获并处理

try {
    FileInputStream fis = new FileInputStream("test.txt");
} catch (FileNotFoundException e) {
    System.out.println("文件不存在:" + e.getMessage());
}

适用于:

  • 异常可以在当前方法中合理处理
  • 例如记录日志、提示用户、使用默认值

方式 2:在方法上声明抛出(throws)

public void readFile() throws IOException {
    FileInputStream fis = new FileInputStream("test.txt");
}

适用于:

  • 当前方法不适合处理
  • 由调用者决定如何处理

方式 3:捕获后重新抛出(包装异常)

try {
    // 可能抛检查异常
} catch (IOException e) {
    throw new RuntimeException("读取失败", e);
}

适用于:

  • 不希望上层强制处理检查异常
  • 保留原始异常信息(很重要)

方式 4:捕获后转换为自定义业务异常

try {
    // 数据库操作
} catch (SQLException e) {
    throw new BusinessException("数据库访问失败", e);
}

适用于:

  • 分层架构(Service / DAO)
  • 对外暴露统一异常类型

三、处理检查异常的最佳实践

✅ 不要空 catch

catch (Exception e) { } // ❌

✅ 不要捕获 Throwable / Exception 太宽泛

✅ 保留原始异常(cause)

throw new RuntimeException(e);

✅ 在合适层级处理

  • DAO:抛
  • Service:转换
  • Controller:统一处理

✅ 结合全局异常处理(如 Spring)

@ControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(IOException.class)
    public ResponseEntity<String> handleIO() {
        return ResponseEntity.status(500).body("IO错误");
    }
}

四、检查异常 vs 非检查异常(简要对比)

类型 是否强制处理 例子
检查异常 是 IOException
非检查异常 否 NullPointerException

如果你是指 某个具体语言 / 框架 / 场景(如 Java Spring、Python、单元测试中的检查异常),可以告诉我,我可以给更针对性的方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手