Wrayの知识库 Wrayの知识库
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
首页
  • Java 基础
  • Java 集合
  • Java 并发
  • Java IO
  • JVM
  • Spring Framework
  • Spring Boot
  • Spring Cloud
  • Spring Security
  • MySQL
  • Redis
  • MacOS
  • Linux
  • Windows
  • 纸质书
  • 电子书
  • 学习课程
疑难杂症
GitHub (opens new window)
  • Java基础

    • Java概述
    • Java语法
    • 面向对象编程
    • Java数组
    • String字符串
    • 异常处理
      • 异常的分类
      • 异常的层次结构
      • 异常处理的关键字
      • 自定义异常
      • 异常处理的最佳实践
      • try-with-resources
  • Java集合

    • Java集合概述
    • ArrayList
    • LinkedList
    • HashMap
    • LinkedHashMap
    • HashSet
    • TreeMap
    • Queue&Deque
  • Java并发

    • Java并发概述
    • 线程与进程
    • Thread类与线程生命周期
    • 线程安全
    • synchronized关键字
    • volatile关键字
    • Java内存模型(JMM)
    • 线程间通信
    • 线程池
    • 并发工具类
    • 原子操作类Atomic
    • 并发锁
    • 并发容器
    • ConcurrentHashMap
    • BlockingQueue
    • CopyOnWriteArrayList
    • ThreadLocal
    • Fork/Join框架
    • ScheduledThreadPoolExecutor
    • CompletableFuture
  • Java IO

    • Java IO概述
  • JVM

    • JVM概述
  • Java
  • Java基础
Wray
2024-10-31
目录

异常处理

在 Java 中,异常处理是一种应对程序运行过程中可能发生的各种错误的机制。异常机制能够使程序在发生错误时保持稳定,并且为开发者提供详细的错误信息,以便进行调试和修复。Java 的异常处理机制主要包括 try-catch、throw、throws 和 finally 等关键字。

# 异常的分类

Java 中的异常主要分为两大类:

  1. 受检异常(Checked Exception):受检异常是在编译期间强制要求处理的异常,例如 IOException、SQLException 等。这类异常需要使用 try-catch 处理或在方法声明中使用 throws 抛出。

  2. 非受检异常(Unchecked Exception):非受检异常是在运行期间出现的异常(继承自RuntimeException),例如 NullPointerException、ArithmeticException 等。它们通常是程序逻辑错误造成的,不强制要求进行处理。

  3. 错误(Error):Error 是 JVM 无法处理的严重问题,例如 OutOfMemoryError。通常情况下,我们不需要捕获或处理这些错误。

# 异常的层次结构

在 Java 中,所有异常都是 Throwable 类的子类,异常的层次结构如下:

  • Throwable
    • Exception
      • IOException
      • SQLException
      • RuntimeException
        • NullPointerException
        • ArithmeticException
    • Error
      • OutOfMemoryError
      • StackOverflowError

# 异常处理的关键字

  1. try-catch:用于捕获和处理异常。

    try {
        int result = 10 / 0;
    } catch (ArithmeticException e) {
        System.out.println("不能除以零:" + e.getMessage());
    }
    
  2. finally:用于在异常发生后执行一些清理操作,无论是否发生异常,finally 块中的代码都会执行。

    try {
        int result = 10 / 0;
    } catch (ArithmeticException e) {
        System.out.println("不能除以零:" + e.getMessage());
    } finally {
        System.out.println("这是 finally 块,无论是否发生异常都会执行。");
    }
    
  3. throw:用于手动抛出异常。

    public void checkAge(int age) {
        if (age < 18) {
            throw new IllegalArgumentException("年龄必须大于等于 18 岁。");
        }
    }
    
  4. throws:用于在方法声明中指明该方法可能抛出的异常类型,调用者需要处理这些异常。

    public void readFile(String fileName) throws IOException {
        FileReader file = new FileReader(fileName);
        BufferedReader reader = new BufferedReader(file);
        reader.readLine();
    }
    

# 自定义异常

Java 允许开发者自定义异常,通过继承 Exception 或 RuntimeException 类来创建自己的异常类型。

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

public class TestCustomException {
    public void test(int value) throws CustomException {
        if (value < 0) {
            throw new CustomException("值不能为负数。");
        }
    }
}

# 异常处理的最佳实践

  1. 不要滥用异常:异常应只在异常情况下使用,不应将其作为正常的控制流。
  2. 捕获特定异常:尽量捕获特定的异常,而不是使用 catch (Exception e),这样可以更准确地处理错误。
  3. 在 finally 中释放资源:对于需要释放的资源(如文件、网络连接等),应该在 finally 块中关闭,以确保资源不被泄露。
  4. 记录异常信息:使用日志工具记录异常信息,便于排查问题。

# try-with-resources

在 JDK 7 中,引入了 try-with-resources 语法,用于简化资源的管理。实现 AutoCloseable 接口的资源可以在使用后自动关闭。

try (FileReader file = new FileReader("test.txt");
     BufferedReader reader = new BufferedReader(file)) {
    String line = reader.readLine();
    System.out.println(line);
} catch (IOException e) {
    e.printStackTrace();
}

这种方式可以有效避免资源泄露,简化代码编写。

上次更新: 2024/10/31, 18:28:18
String字符串
Java集合概述

← String字符串 Java集合概述→

Copyright © 2023-2024 Wray | 鄂ICP备2024050235号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式