知其所以然-剖析异常处理流程 | 带你学《Java面向对象编程》之七十八

简介: 本节从原理讲起,通过讲解Java处理异常的流程向读者展示了捕获异常的另外一种思路。

上一篇:强悍的异常处理-处理多个异常 | 带你学《Java面向对象编程》之七十七
【本节目标】
通过阅读本节内容,你将了解到捕获异常实际上也是在操作一个异常类的实例化对象,并学会使用Exception来捕获自己未知的异常。

异常处理流程

在进行异常处理的时候如果将所有可能已经明确知道要产生的异常都进行了捕获,虽然可以得到非常良好的代码结构,但是这种代码编写是非常麻烦的,所以现在要想进行合理异常就必须清楚在异常产生之后程序到底做了哪些处理。

image.png
图一 Java异常处理流程

  1. 在程序运行的过程之中才会产生异常,而一旦程序执行中产生了异常之后将自动进行指定类型的异常类对象实例化处理;
  2. 如果此时程序之中并没有提供有异常处理的支持,则会采用JVM的默认异常处理方式首先进行异常信息的打印,而后直接退出当前的程序;
  3. 此时程序中如果存在有异常处理,那么这个产生的异常类的实例化对象将会被try语句所捕获;
  4. try捕获到异常之后与其匹配的catch中的异常类型进行依次的比对,如果此时与catch中的捕获异常类型相同,则认为应该采用此catch进行异常处理,如果不匹配则继续匹配后续的catch类型,如果没有任何的catch匹配成功,那么就表示该异常无法进行处理;
  5. 不管异常是否进行处理最终都要执行finally的语句,但是当执行完成finally的程序之后会进一步判断当前的异常是否已经处理过了,如果已经处理过了,则继续向后执行其它代码,如果没有处理,则交由JVM进行默认的处理。

通过分析可以发现在整个的异常处理流程之中实际上操作的还是一个异常类的实例化对象,那么这个异常类的实例化对象的类型就成为了理解异常处理的核心关键所在。在之前接触的几种异常的两个:

ArithmeticException: ArrayIndexOutOfBoundsException:
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.ArithmeticException
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
java.lang.IndexOutOfBoundsException
java.lang.ArrayIndexOutOfBoundsException

可以发现在程序之中可以处理的异常的最大的类型就是Throwable,而打开Throwable可以观察到在此类中提供有两个子类:

  • Error:此时程序还未执行出现的错误,开发者无法处理;
  • Exception:程序中出现的异常,开发者可以处理,真正在开发中所需要关注的就是Exception;

通过分析可以发现异常产生的时候会产生异常的实例化对象,那么按照对象的引用原则,可以自动向父类转型,那么如果按照这样的逻辑,实际上所有的异常都可以使用Exception来处理。
范例:简化异常处理

public class JavaDemo{
    public static void main(String args[]) {
        System.out.println("【1】*****程序开始执行*****") ; 
        try {
              int x = Integer.parseInt(args [0]) ;
              int y = Integer.parseInt(args [1]) ;
              System.out.println("【2】数学计算:" +(x / y)) ;    
        }catch (Exception e) {
              e.printStackTrace() ;
        }finally {
              System.out.println("【F】不管是否出现异常,我都会执行。") ;
        }
        System.out.println("【3】*****程序执行完毕*****") ;    
    }     
}

当不确定可能产生哪些异常的时候,这种处理是最方便的。但是如果这样处理也会产生一个问题。这种异常处理的形式虽然方便,但是它描述的错误信息不明确,分开处理异常是一种可以更加明确的处理方式。
在以后进行多个异常同时处理的时候,要把捕获范围大的异常 放在捕获范围小的异常之后。

想学习更多的Java的课程吗?从小白到大神,从入门到精通,更多精彩不容错过!免费为您提供更多的学习资源。
本内容视频来源于阿里云大学

下一篇:对异常说“我不管” | 带你学《Java面向对象编程》之七十九
更多Java面向对象编程文章查看此处

相关文章
|
2月前
|
前端开发 Java API
2025 年 Java 全栈从环境搭建到项目上线实操全流程指南:Java 全栈最新实操指南(2025 版)
本指南涵盖2025年Java全栈开发核心技术,从JDK 21环境搭建、Spring Boot 3.3实战、React前端集成到Docker容器化部署,结合最新特性与实操流程,助力构建高效企业级应用。
526 1
|
2月前
|
JavaScript 安全 前端开发
Java开发:最新技术驱动的病人挂号系统实操指南与全流程操作技巧汇总
本文介绍基于Spring Boot 3.x、Vue 3等最新技术构建现代化病人挂号系统,涵盖技术选型、核心功能实现与部署方案,助力开发者快速搭建高效、安全的医疗挂号平台。
146 3
|
2月前
|
消息中间件 Java 数据库
Java 基于 DDD 分层架构实战从基础到精通最新实操全流程指南
本文详解基于Java的领域驱动设计(DDD)分层架构实战,结合Spring Boot 3.x、Spring Data JPA 3.x等最新技术栈,通过电商订单系统案例展示如何构建清晰、可维护的微服务架构。内容涵盖项目结构设计、各层实现细节及关键技术点,助力开发者掌握DDD在复杂业务系统中的应用。
342 0
|
2月前
|
Java 编译器
Java 17 Switch表达式:更简洁、更强大的流程控制
Java 17 Switch表达式:更简洁、更强大的流程控制
|
2月前
|
消息中间件 Java Kafka
Java 事件驱动架构设计实战与 Kafka 生态系统组件实操全流程指南
本指南详解Java事件驱动架构与Kafka生态实操,涵盖环境搭建、事件模型定义、生产者与消费者实现、事件测试及高级特性,助你快速构建高可扩展分布式系统。
169 7
|
2月前
|
JavaScript Java 微服务
现代化 Java Web 在线商城项目技术方案与实战开发流程及核心功能实现详解
本项目基于Spring Boot 3与Vue 3构建现代化在线商城系统,采用微服务架构,整合Spring Cloud、Redis、MySQL等技术,涵盖用户认证、商品管理、购物车功能,并支持Docker容器化部署与Kubernetes编排。提供完整CI/CD流程,助力高效开发与扩展。
334 64
|
3月前
|
安全 Java 测试技术
Java 项目实战中现代技术栈下代码实现与测试调试的完整流程
本文介绍基于Java 17和Spring技术栈的现代化项目开发实践。项目采用Gradle构建工具,实现模块化DDD分层架构,结合Spring WebFlux开发响应式API,并应用Record、Sealed Class等新特性。测试策略涵盖JUnit单元测试和Testcontainers集成测试,通过JFR和OpenTelemetry实现性能监控。部署阶段采用Docker容器化和Kubernetes编排,同时展示异步处理和反应式编程的性能优化。整套方案体现了现代Java开发的最佳实践,包括代码实现、测试调试
143 0
|
3月前
|
人工智能 Cloud Native Java
Java 技术栈企业级应用开发全流程
本指南通过构建企业级电商系统,全面解析现代化Java技术栈实战应用。涵盖Spring Boot 3、微服务架构、云原生部署、服务治理、监控可观测性及AI集成,助开发者掌握全流程开发技能,打造高效可扩展的企业级应用。
203 0
Java 技术栈企业级应用开发全流程
|
3月前
|
消息中间件 监控 Java
借助最新技术构建 Java 邮件发送功能的详细流程与核心要点分享 Java 邮件发送功能
本文介绍了如何使用Spring Boot 3、Jakarta Mail、MailHog及响应式编程技术构建高效的Java邮件发送系统,涵盖环境搭建、异步发送、模板渲染、测试与生产配置,以及性能优化方案,助你实现现代化邮件功能。
148 0
|
3月前
|
Java 编译器 数据库连接
Java异常处理:写出更健壮的代码
Java异常处理:写出更健壮的代码
167 0