Java 的异常体系基于 Throwable
类,分为 Error 和 Exception 两大类。
Error
• 表示严重问题,通常与程序逻辑无关,如内存耗尽(OutOfMemoryError
)、栈溢出(StackOverflowError
)等。
• 无需处理:程序一般无法恢复,只能终止运行。
Exception
• 程序可处理的异常,分为两类:
◦ Checked Exception(受检异常):编译时强制检查的异常,如 IOException
、SQLException
。必须通过 try-catch
处理或 throws
声明抛出。
◦ Unchecked Exception(非受检异常):即 RuntimeException
及其子类,如 NullPointerException
、ArrayIndexOutOfBoundsException
。通常由编程错误导致,不强制处理。
plaintextThrowable ├── Error │ ├── OutOfMemoryError │ └── StackOverflowError └── Exception ├── Checked Exceptions(如 IOException) └── RuntimeException(如 NullPointerException)
javatry {
FileInputStream fis = new FileInputStream("file.txt");
} catch (FileNotFoundException e) {
System.out.println("文件未找到");
} catch (IOException e) {
e.printStackTrace();
} finally {
// 清理资源
}
javapublic void readFile() throws FileNotFoundException {
// 可能抛出 FileNotFoundException
}
javaif (input < 0) {
throw new IllegalArgumentException("输入不能为负数");
}
Exception
(Checked)或 RuntimeException
(Unchecked)。
• 提供构造方法(建议包含无参和带消息的构造)。javapublic class MyException extends RuntimeException {
public MyException(String message) {
super(message);
}
}
javaif (balance < amount) {
throw new InsufficientBalanceException("余额不足");
}
|
分隔。javatry {
// 可能抛出多种异常
} catch (IOException | SQLException e) {
e.printStackTrace();
}
AutoCloseable
接口)。javatry (FileInputStream fis = new FileInputStream("file.txt")) {
// 使用资源
} catch (IOException e) {
e.printStackTrace();
}
Exception
可能掩盖问题。javatry {
// 代码逻辑
} catch (ServiceException e) {
throw new BusinessException("业务失败", e); // 传递原始异常
}
• 性能影响:异常处理较慢,避免用于控制流程。
• 打印堆栈:e.printStackTrace()
或日志框架记录。
• 覆盖方法异常:子类方法抛出的异常不能比父类更宽泛。
通过理解异常体系和合理使用处理机制,可以编写更健壮、易维护的 Java 代码。
本文作者:宁小健
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!