当前位置:首页 > Java

java如何使用异常

2026-02-05 02:22:02Java

异常处理基础

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("清理资源");
}

异常类型

  • 受检异常(Checked Exception):编译时强制检查,必须处理(如IOException)。
  • 非受检异常(Unchecked Exception):包括运行时异常(如NullPointerException)和错误(如OutOfMemoryError),通常不强制处理。
// 受检异常需显式处理
try {
    FileReader file = new FileReader("test.txt");
} catch (FileNotFoundException e) {
    System.out.println("文件未找到");
}

抛出异常

通过throw主动抛出异常,或在方法签名中使用throws声明可能抛出的异常。

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

// 声明异常
void readFile() throws IOException {
    Files.readAllLines(Paths.get("file.txt"));
}

自定义异常

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

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

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

异常链

通过initCause()或构造方法传递原始异常,保留完整的异常信息。

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

try-with-resources

自动管理资源(实现AutoCloseable接口的类),无需显式调用close()

java如何使用异常

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

最佳实践

  • 避免捕获过于宽泛的异常(如直接捕获Exception),应针对具体异常类型处理。
  • finally块中释放资源,或使用try-with-resources简化代码。
  • 日志记录异常信息(如e.printStackTrace()或日志框架)。
  • 自定义异常时提供有意义的错误信息。

分享给朋友:

相关文章

react路由如何使用

react路由如何使用

React 路由的基本使用 React 路由通常通过 react-router-dom 库实现,用于管理单页面应用(SPA)中的页面导航。 安装 react-router-dom: npm ins…

如何使用ink react

如何使用ink react

安装 Ink 和 React 在项目目录下运行以下命令安装 Ink 和 React 的依赖: npm install ink react 创建基础组件 创建一个简单的 Ink 组件,例如 Hello…

react如何使用swiper

react如何使用swiper

安装 Swiper 依赖 在 React 项目中使用 Swiper 前,需要安装 Swiper 的核心库和 React 组件库。通过 npm 或 yarn 安装以下依赖: npm install s…

react refs 如何使用

react refs 如何使用

React Refs 的基本概念 Refs 是 React 提供的一种访问 DOM 节点或 React 组件实例的方式。通常在 React 的数据流中,父子组件通过 props 进行通信,但在某些情况…

react如何使用图片

react如何使用图片

在React中使用图片的方法 静态图片导入 在React组件中可以直接通过import导入图片文件,这种方式适用于已知的静态资源。导入后,图片会被处理为模块,可通过src属性引用。 import R…

react如何使用mobx

react如何使用mobx

使用 MobX 在 React 项目中 在 React 项目中集成 MobX 需要安装必要的依赖包并配置 Store 和组件。以下是详细步骤: 安装依赖 确保项目中已安装 mobx 和 mobx-r…