java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > java exception异常体系

Java Exception异常体系详解

作者:魏波.

在Java中,异常(Exception)是Java编程语言中的一个重要概念,用于处理程序在运行时可能遇到的问题,下面给大家详细介绍Java Exception异常体系的相关知识,感兴趣的朋友一起看看吧

Exception异常体系详解

在 Java 中,异常(Exception)是程序运行过程中可能出现的错误或意外情况的抽象,用于提示开发者处理潜在的问题。Java 的异常体系基于继承机制,所有异常类最终都继承自 java.lang.Throwable 类。其中,Exception 是 Throwable 的直接子类,​​表示程序可以处理的异常​​(而 Error 表示 JVM 或系统级严重错误,通常无法处理)。

一、异常体系的核心结构

Throwable
├── Error(系统级错误,程序通常无法处理)
│   ├── OutOfMemoryError(内存溢出)
│   ├── StackOverflowError(栈溢出)
│   └── ...
└── Exception(程序可处理的异常)
    ├── RuntimeException(非受检异常/运行时异常)
    │   ├── NullPointerException(空指针)
    │   ├── ArrayIndexOutOfBoundsException(数组越界)
    │   ├── IllegalArgumentException(非法参数)
    │   └── ...
    └── Checked Exception(受检异常,需显式处理)
        ├── IOException(IO 异常)
        ├── SQLException(数据库异常)
        ├── ClassNotFoundException(类未找到)
        └── ...

二、Exception 的两大核心分类

Java 中的 Exception 主要分为两类:​​受检异常(Checked Exception)​​ 和 ​​非受检异常(Unchecked Exception,又称运行时异常)​​。两者的核心区别在于编译器是否强制要求处理。

1. 受检异常(Checked Exception)

​​常见受检异常示例​​:

异常类场景描述
IOException输入输出操作失败(如文件读写、网络传输)。
FileNotFoundException尝试打开不存在的文件(IOException 的子类)。
SQLException数据库操作失败(如连接失败、SQL 语法错误)。
ClassNotFoundException通过 Class.forName() 加载类时,类不存在(常见于反射)。
InterruptedException线程被中断(如调用 Thread.interrupt())。
ParseException字符串解析失败(如 SimpleDateFormat.parse() 解析非法日期字符串)。

2. 非受检异常(Unchecked Exception,运行时异常)

​​常见非受检异常示例​​:

异常类场景描述
NullPointerException访问 null 对象的方法或属性(最常见)。
ArrayIndexOutOfBoundsException访问数组时索引超出范围(如 arr[10] 但数组长度为 5)。
StringIndexOutOfBoundsException字符串操作中索引超出范围(如 substring(10) 但字符串长度为 5)。
IllegalArgumentException方法接收了不合法参数(如要求正数但传入负数)。
ArithmeticException算术运算错误(如除以 0:5 / 0)。
ClassCastException强制类型转换失败(如 Object obj = "abc"; Integer i = (Integer) obj)。
NumberFormatException字符串转换为数字失败(如 Integer.parseInt("abc"))。

三、自定义异常(Custom Exception)

Java 允许开发者通过继承 Exception 或 RuntimeException 来创建​​自定义异常类​​,用于处理特定业务场景的错误。

​​自定义异常的最佳实践​​:

​​示例:自定义受检异常​​

// 自定义受检异常(继承 Exception)
public class PaymentException extends Exception {
    // 无参构造
    public PaymentException() {
        super();
    }
    // 带错误消息的构造
    public PaymentException(String message) {
        super(message);
    }
    // 带原因的构造(用于异常链)
    public PaymentException(String message, Throwable cause) {
        super(message, cause);
    }
}
// 使用自定义异常
public class OrderService {
    public void pay(double amount) throws PaymentException {
        if (amount <= 0) {
            throw new PaymentException("支付金额不能为负数或零");
        }
        // 支付逻辑...
    }
}

四、总结

Java 的异常体系通过 Throwable → Exception/Error 分层,其中 Exception 是程序可处理的异常,核心分为:

合理使用异常可以提升代码的健壮性和可维护性,自定义异常则能更精准地表达业务中的错误场景。

到此这篇关于Java Exception异常体系详解的文章就介绍到这了,更多相关java exception异常体系内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文