当前位置:首页 > Java

java异常如何处理

2026-02-04 22:07:15Java

异常处理的基本概念

Java异常分为检查型异常(Checked Exception)非检查型异常(Unchecked Exception)。检查型异常需在编译时处理(如IOException),非检查型异常包括运行时异常(如NullPointerException)和错误(如OutOfMemoryError)。

try-catch-finally 块

通过try捕获可能抛出异常的代码,catch处理特定异常,finally确保资源释放(无论是否发生异常):

try {
    // 可能抛出异常的代码
    FileInputStream file = new FileInputStream("test.txt");
} catch (FileNotFoundException e) {
    // 处理文件未找到异常
    System.err.println("文件未找到: " + e.getMessage());
} finally {
    // 关闭资源
    if (file != null) {
        file.close();
    }
}

多重 catch 块

按异常子类到父类的顺序捕获多个异常:

try {
    int[] arr = {1, 2};
    System.out.println(arr[3]); // 抛出ArrayIndexOutOfBoundsException
} catch (ArrayIndexOutOfBoundsException e) {
    System.err.println("数组越界: " + e);
} catch (Exception e) {
    System.err.println("通用异常处理: " + e);
}

throws 声明异常

在方法签名中使用throws将异常抛给调用者处理:

public void readFile() throws IOException {
    FileReader reader = new FileReader("file.txt");
    // 其他操作
}

throw 手动抛出异常

通过throw主动抛出异常对象:

if (input < 0) {
    throw new IllegalArgumentException("输入不能为负数");
}

自定义异常

继承ExceptionRuntimeException创建自定义异常:

public class CustomException extends Exception {
    public CustomException(String message) {
        super(message);
    }
}

// 使用示例
try {
    throw new CustomException("自定义异常");
} catch (CustomException e) {
    System.err.println(e.getMessage());
}

try-with-resources

自动管理资源(需实现AutoCloseable接口):

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

异常链与 cause

通过initCause()或构造方法传递原始异常:

try {
    // 模拟原始异常
    throw new NullPointerException("原始异常");
} catch (NullPointerException e) {
    IllegalArgumentException ex = new IllegalArgumentException("包装异常");
    ex.initCause(e);
    throw ex;
}

最佳实践

  1. 精准捕获:避免直接捕获Exception,优先处理具体异常类型。
  2. 资源释放:使用try-with-resourcesfinally确保资源关闭。
  3. 日志记录:通过日志工具(如SLF4J)记录异常详情。
  4. 避免空捕获catch块中至少记录异常信息。
  5. 自定义异常:为业务逻辑定义清晰的异常类型。

示例日志记录:

java异常如何处理

catch (IOException e) {
    logger.error("文件操作失败", e);
    throw new BusinessException("业务处理失败", e);
}

分享给朋友:

相关文章

uniapp插槽异常

uniapp插槽异常

uniapp插槽异常常见原因及解决方法 插槽在uniapp开发中常用于组件间内容分发,异常可能由以下原因导致: 作用域插槽未正确声明 插槽作用域变量需在父组件和子组件间明确传递。子组件需定义v-sl…

react如何处理组件异常

react如何处理组件异常

错误边界(Error Boundaries) React 16+ 引入了错误边界概念,用于捕获子组件树中的 JavaScript 错误。通过定义 static getDerivedStateFromE…

react中如何处理图片变形

react中如何处理图片变形

处理图片变形的方法 在React中处理图片变形通常涉及控制图片的宽高比、裁剪或缩放。以下是几种常见方法: 使用CSS object-fit属性 通过CSS的object-fit属性可以控制图片如何适…

react销毁组件ref如何处理

react销毁组件ref如何处理

React 组件销毁时 Ref 的处理方法 在 React 中,当组件销毁时,与 ref 相关的资源需要妥善处理以避免内存泄漏或意外行为。以下是几种常见的处理方式: 清理 ref 的当前值 在组件…

java如何抛出异常

java如何抛出异常

抛出异常的方法 在Java中,抛出异常主要通过throw关键字实现,用于在代码中显式触发异常。以下是具体的使用方式: 基本语法 throw new ExceptionType("Error mes…

java如何自定义异常

java如何自定义异常

自定义异常的基本步骤 在Java中自定义异常需要继承自Exception类或其子类。通常推荐继承RuntimeException创建非受检异常,或继承Exception创建受检异常。 // 自定义非…