java如何使用异常
异常的基本概念
在Java中,异常是程序运行时可能发生的错误或意外情况。异常处理机制允许程序在出现问题时优雅地恢复或终止,而不是直接崩溃。Java的异常分为两类:
- 受检异常(Checked Exception):必须显式处理(如
IOException)。 - 非受检异常(Unchecked Exception):包括运行时异常(如
NullPointerException)和错误(如OutOfMemoryError),通常不强制处理。
异常处理语法
使用 try-catch-finally 块捕获和处理异常:
try {
// 可能抛出异常的代码
int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {
// 捕获特定异常
System.out.println("除零错误: " + e.getMessage());
} catch (Exception e) {
// 捕获所有其他异常
System.out.println("未知错误: " + e);
} finally {
// 无论是否发生异常都会执行
System.out.println("清理资源");
}
抛出异常
通过 throw 关键字手动抛出异常:
if (age < 0) {
throw new IllegalArgumentException("年龄不能为负数");
}
声明异常
在方法签名中使用 throws 声明可能抛出的受检异常:
public void readFile(String path) throws IOException {
// 可能抛出 IOException 的代码
}
自定义异常
通过继承 Exception 或 RuntimeException 创建自定义异常:
public class InvalidInputException extends Exception {
public InvalidInputException(String message) {
super(message);
}
}
最佳实践
- 精准捕获:优先捕获具体异常,而非直接捕获
Exception。 - 资源管理:使用
try-with-resources自动关闭资源(如文件流):try (FileInputStream fis = new FileInputStream("file.txt")) { // 使用资源 } catch (IOException e) { e.printStackTrace(); } - 避免空捕获:捕获异常后至少记录日志或处理,避免空
catch块掩盖问题。
通过合理使用异常处理,可以提升程序的健壮性和可维护性。







