Java异常体系概述

本文深入解析Java异常体系,包括Error、Exception、RuntimeException等关键概念,以及CheckedException与UncheckedException的区别。探讨了传统与进阶版异常分类结构,提供了一种更逻辑化的异常处理视角。

Java异常体系

在Java中,利用类对所有不正常的现象进行了描述,并将其封装成对象。通过这些类,Java语言定义了一套完整的、专门用来处理Java中的各种异常的机制,我们称之为Java的异常机制(或体系)。

在大多数初学者的印象中(包括笔者),Java异常机制的体系结构应该包含这么几个要点:

  • 所有异常类都是Throwable的子类
  • 异常可分为Error(错误)和Exception(异常)两类
  • Exception又可分为RuntimeException(运行时异常)和非运行时异常两类

对于Error,RuntimeException以及非运行时异常这三个异常类,又包含了很多具体的直接子异常类,这里不再赘述。

通过以上知识点,已然可以构建出Java异常机制的体系结构的基本面貌。翻阅API后,我们也不难得知——对于Java语言本身而言,异常机制确实就是如此。下图描述了传统的Java异常体系结构。

然鹅,传统的异常体系结构描述虽然简单且正确,但在逻辑和理解性上稍显逊色。这里笔者更推荐下述的异常分类结构。

这种异常分类结构来自Alibaba的《码出高效:Java开发手册》一书,相比传统的异常体系结构,这种分类方式,更具有逻辑性,且在具体的开发场景中更有帮助。笔者结合《码出高效:Java开发手册》书中的定义对这种进阶版的异常分类方式中各个异常类型意义进行简单解释。

  • 同样,Throwable作为所有异常类的超类存在。Throwable可以分为Error(致命异常)和Exception(非致命异常)两类。
  • Error是一种非常特殊的异常类型,它的出现标识着程序发生了不可控的错误,例如OOM或栈溢出等。针对此类错误,程序无法处理,只能人工介入。
  • Exception可进一步分为Checked Exception(受检异常)和Unchecked Exception(非受检异常)。
  • Checked Exception(受检异常)。是需要在代码中显式处理的异常,如果不进行处理,则会出现编译错误。常见的受检异常包括SQLException、ClassNotFoundException等。笔者在学习Java的过程中,也听过有人将此类异常称之为“编译时异常”。Checked Exception可进一步细分为两类:
    • 无能为力,引起注意型。针对此类异常,程序无法处理,如字段超长等导致的SQLException,即使做再多的重试对于解决异常也没有任何帮助,一般处理此类异常的做法是完整的保存异常现场,供开发工程师介入解决。
    • 力所能及,坦然处置型。如发生未授权异常(UnAuthorizedException),程序可跳转至权限申请页面。
  • Unchecked Exception(非受检异常)。是运行时异常,它们都继承自RuntimeException,不需要程序进行显式的捕捉和处理,但这并不意味着此类异常不会发生,如IndexOutOfBoundsException、NullPointerException。Unchecked Exception可进一步细分为三类:
    • Predicted Exception(可预测异常):常见的可预测异常包括IndexOutOfBoundsException、NullPointerException等,基于对代码性能和稳定性的要求,此类异常不应该产生或者被抛出,而应该提前做好边界检查、空指针判断等处理。显式的声明或者捕获此类异常会对程序的可读性和运行效果产生很大影响。
    • Caution Exception(需捕捉异常):对于此类异常,需要进行显式的捕捉,以保持程序的可用性和稳定性。如Dubbo框架进行RFC调用产生的远程服务超时异常DubboTimeoutException,此类异常时客户端必须显式处理的异常,不能因为服务端的异常导致客户端不可用,此时处理方案可以是重试或降级处理等。
    • Ignored Exception(可透出异常):主要是指框架或系统产生的且会自动处理的异常,而程序无需关心。例如针对Spring框架中抛出的NoSuchRequestHandlingMethodException异常,Spring框架会自己完成异常的处理,默认将自身抛出的异常自动映射到合适的状态码,比如启动防护机制跳转到404页面。

不难发现,这种新的异常分类方式可以更好的适应需要处理异常的场景,只需要明确该异常属于哪种类型,就能够针对这样的异常进行合适的处理。避免了异常的泛滥。

 

常见异常类

受限于篇幅,笔者在另一篇博文中结合JavaAPI简单整理了Java中常见的异常类。详情请跳转

《Java常见异常类》https://blog.csdn.net/Return_head/article/details/90243070

 

 

内容概要:本文档为成都科洛威尔科技有限公司生产的MIL-1394B仿真板卡的API函数使用手册,详细介绍了该板卡在Windows和Linux环境下进行MIL-1394B/AS5643总线协议仿真和测试所需的API函数、数据结构、使用流程及例程。板卡支持CC(控制计算机)、RN(远程节点)和BM(总线监控)三种工作模式,提供丰富的函数用于设备管理、节点控制、消息收发、故障注入、中断处理等功能,涵盖数据包格式、发送接收流程、错误检测机制等关键技术细节。手册还提供了函数调用示例和典型应用场景,帮助开发者快速掌握板卡的开发与调试。; 适合人群:从事航空电子、嵌入式系统或工业自动化领域,具备C/C++编程基础熟悉总线通信协议的1-3年工作经验的软硬件研发工程师。; 使用场景及目标:①在复杂总线环境中实现高精度数据仿真与测试;②开发基于MIL-1394B协议的通信系统;③进行消息收发控制、时序偏移管理、错误注入测试及中断响应处理等高级功能验证;④通过API调用实现对板卡工作模式、数据流、状态监测的全面控制。; 阅读建议:建议结合配套的demo示例程序进行实践,重点理解各函数的调用时序与参数配置逻辑,尤其关注STOF时序控制、消息发送模式、错误注入机制等核心功能的实现原理。使用前需仔细阅读“基本使用流程”与“附录”部分,确保正确配置硬件环境与通信参数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值