Java 异常类层次结构

本文详细介绍了Java中的异常处理机制,包括受检查的异常、运行时异常及Error的区别,并通过图表形式直观展示Java异常类的继承关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

翻译人员: 铁锚
翻译时间: 2013年11月15日
原文链接:  Exception Hierarchy in Java – Diagram

在Java中,异常分为受检查的异常,与运行时异常. 两者都在异常类层次结构中.
下面的图展示了Java异常类的继承关系.


图1

粉红色的是受检查的异常(checked exceptions),其必须被 try{}catch语句块所捕获,或者在方法签名里通过throws子句声明.受检查的异常必须在编译时被捕捉处理,命名为 CHecked Exception 是因为Java编译器要进行检查,Java虚拟机也要进行检查,以确保这个规则得到遵守.
绿色的异常是运行时异常(runtime exceptions),需要程序员自己分析代码决定是否捕获和处理,比如 空指针,被0除...
而声明为Error的,则属于严重错误,需要根据业务信息进行特殊处理,Error不需要捕捉。

想要了解更多,请参考:  Top 10 Questions about Java Exceptions

相关文章:

  1. Top 10 Questions about Java Exceptions
  2. Java Exception Handling Example
  3. java io class hierarchy diagram
  4. Operating System Concepts Hierarchy Diagram

转载于:https://www.cnblogs.com/lanzhi/p/6467077.html

<think>嗯,用户想了解Java异常类层次结构和继承关系,希望获得图解形式的解释。用户明确提到"层次结构"和"继承关系",说明需要系统化的知识梳理。从用户提供的引用素材来看,用户已经有Java基础认知:引用[1]提到继承语法extends,引用[2]展示自定义异常类(继承Exception),引用[3]提到JVM常量池。用户很可能在编写自定义异常时遇到困惑,需要理清标准异常体系。系统要求使用严格LaTeX格式,但在异常类体系描述中需要突出类名间的继承关系。考虑用缩进层级代替数学公式:Throwable作为根节点,Exception和Error作为一级子类,RuntimeException等作为二级子类。这样既清晰又符合非数学内容的表达需求。用户请求"图解",但纯文本环境无法渲染图片。改用树状文字结构+类名高亮处理:顶层Throwable独立成段,子类依次缩进,关键类如IOException加粗。同时补充UML符号说明(▷表示继承),兼顾专业性和可读性。需特别说明错误类(Error)和异常类(Exception)的区别,因为引用[3]显示用户关注JVM机制。准备用$...$标记Error类(如OutOfMemoryError)属于系统级问题,与普通异常隔离。注意到引用[2]的自定义异常案例,在回复中拟添加自定义异常的位置标注(直接继承Exception),并提示RuntimeException的特殊性(无需显式捕获)。最后生成实操问题时会延续这个知识点。</think> 以下是Java异常类层次结构图解及继承关系的详细说明(基于标准Java 17 API): ```mermaid classDiagram direction BT class Throwable { <<serializable>> +getMessage() String +printStackTrace() } class Error { <<non-checked>> +OutOfMemoryError +StackOverflowError +VirtualMachineError } class Exception { +IOException +SQLException +RuntimeException } class RuntimeException { <<non-checked>> +NullPointerException +IndexOutOfBoundsException +IllegalArgumentException } Throwable <|-- Error Throwable <|-- Exception Exception <|-- RuntimeException ``` ### 核心继承关系: 1. **根类**:`java.lang.Throwable` - 所有错误/异常的基类 - 直接子类:`Error` 和 `Exception` 2. **系统错误**:`java.lang.Error` (▷ `Throwable`) - **特点**:JVM严重问题,通常不可恢复 - 常见子类: - `OutOfMemoryError`:内存耗尽 - `StackOverflowError`:栈溢出 - `VirtualMachineError`:JVM内部故障 3. **检查型异常**:`java.lang.Exception` (▷ `Throwable`) - **特点**:必须被捕获或声明抛出(`throws`) - 常见子类: - `IOException`:I/O操作失败 - `SQLException`:数据库访问错误 - `ClassNotFoundException`:类加载失败 4. **非检查型异常**:`java.lang.RuntimeException` (▷ `Exception`) - **特点**:无需强制处理(可避免的逻辑错误) - 常见子类: - `NullPointerException`:空对象访问 - `IllegalArgumentException`:非法参数 - `IndexOutOfBoundsException`:下标越界 ### 关键特性说明: 1. **检查型异常(Checked)**: - 编译器强制要求处理 - 示例:`try-catch` 或 `throws` 声明 ```java void readFile() throws IOException { ... } // 必须声明 ``` 2. **非检查型异常(Unchecked)**: - 包含 `Error` 及其子类 + `RuntimeException` 及其子类 - 示例:空指针异常可跳过显式处理 ```java String s = null; System.out.println(s.length()); // 运行时抛出NullPointerException ``` 3. **自定义异常**: - 应继承 `Exception`(检查型)或 `RuntimeException`(非检查型) ```java // 自定义检查型异常 public class MyException extends Exception { public MyException(String msg) { super(msg); } } ``` > 继承树总结: > $ \text{Throwable} \to \begin{cases} \text{Error} \\ \text{Exception} \to \begin{cases} \text{检查型异常(如IOException)} \\ \text{RuntimeException} \end{cases} \end{cases} $ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值