当前位置:首页 > Java

java 如何实现异常处理

2026-03-18 17:53:51Java

Java 异常处理的基本结构

Java 通过 try-catch-finally 块实现异常处理。代码块中可能抛出异常的语句放在 try 中,异常捕获逻辑写在 catch 中,无论是否发生异常都会执行的代码放在 finally 中。

try {
    // 可能抛出异常的代码
    int result = 10 / 0; // 抛出 ArithmeticException
} catch (ArithmeticException e) {
    // 捕获并处理异常
    System.out.println("除零错误: " + e.getMessage());
} finally {
    // 最终执行的代码(如资源释放)
    System.out.println("执行结束");
}

捕获多类异常

通过多个 catch 块或使用 | 运算符(Java 7+)捕获多种异常类型。

try {
    // 可能抛出多种异常的代码
    int[] arr = new int[5];
    arr[10] = 1; // 抛出 ArrayIndexOutOfBoundsException
} catch (ArithmeticException | ArrayIndexOutOfBoundsException e) {
    System.out.println("异常类型: " + e.getClass().getSimpleName());
}

抛出异常

使用 throw 主动抛出异常,通常用于自定义逻辑验证。

void validateAge(int age) {
    if (age < 0) {
        throw new IllegalArgumentException("年龄不能为负数");
    }
}

自定义异常

继承 ExceptionRuntimeException 创建自定义异常类。

class CustomException extends RuntimeException {
    CustomException(String message) {
        super(message);
    }
}

// 使用示例
throw new CustomException("自定义异常消息");

异常传播

方法声明中通过 throws 标记可能抛出的异常,调用者需处理或继续抛出。

void readFile() throws IOException {
    // 可能抛出 IOException 的代码
    Files.readAllLines(Paths.get("nonexistent.txt"));
}

// 调用者处理异常
try {
    readFile();
} catch (IOException e) {
    System.out.println("文件读取失败: " + e.getMessage());
}

try-with-resources

Java 7+ 引入的语法,自动关闭实现了 AutoCloseable 的资源(如文件流)。

java 如何实现异常处理

try (BufferedReader br = new BufferedReader(new FileReader("file.txt"))) {
    String line;
    while ((line = br.readLine()) != null) {
        System.out.println(line);
    }
} catch (IOException e) {
    System.out.println("IO异常: " + e.getMessage());
}

最佳实践

  • 精准捕获:避免笼统捕获 Exception,优先处理具体异常类型。
  • 日志记录:使用日志工具(如 SLF4J)记录异常详细信息。
  • 资源管理:优先使用 try-with-resources 替代手动 finally 块。
  • 避免空捕获:禁止空的 catch 块,至少打印日志或恢复上下文。

分享给朋友:

相关文章

Vue如何实现多级域名

Vue如何实现多级域名

Vue 实现多级域名的方法 Vue 本身是一个前端框架,多级域名的实现通常需要结合后端配置和前端路由。以下是几种常见的方法: 使用路由动态匹配 在 Vue Router 中可以通过动态路由参数匹配…

vue如何实现两栏布局

vue如何实现两栏布局

使用Flexbox实现两栏布局 Flexbox是CSS3中强大的布局方式,可以轻松实现两栏布局。在Vue中可以直接在组件的style标签中使用。 <template> <div…

vue如何实现重新实现主题

vue如何实现重新实现主题

Vue 主题切换的实现方法 使用 CSS 变量动态切换主题 定义主题相关的 CSS 变量,通过修改这些变量实现主题切换。在根元素(如 :root)中定义默认主题的变量,在特定类名下定义其他主题的变量。…

如何实现语音react

如何实现语音react

语音识别基础设置 在React中实现语音识别功能通常需要借助浏览器的Web Speech API或第三方库。Web Speech API提供了SpeechRecognition接口,允许应用程序直接访…

vue如何实现分离

vue如何实现分离

Vue 实现代码分离的方法 Vue 提供了多种方式实现代码分离,提升项目的可维护性和模块化程度。以下是常见的几种方法: 组件化开发 将功能拆分为独立的 Vue 组件,每个组件包含自己的模板、逻辑和样…

react如何抛异常

react如何抛异常

如何在 React 中抛出异常 在 React 中,异常处理通常分为组件内部错误和全局错误捕获两种方式。以下是具体实现方法: 组件内部抛出异常 直接使用 JavaScript 的 throw 语句…