课时118:异常处理流程

简介: 课时118介绍了异常处理流程,强调了理解异常类实例化对象的重要性。主要内容包括:异常处理的含义、异常产生的机制(如Try-Catch-Finally语句的使用)、常见的异常类型(如ArithmeticException和ArrayIndexOutOfBoundsException),以及简化异常处理的方法。通过示例代码展示了如何合理捕获和处理异常,确保程序的健壮性。特别指出,在多个异常同时处理时,应将捕获范围大的异常放在最后,以避免覆盖具体的异常处理逻辑。

课时118:异常处理流程

摘要:知道异常的处理格式,想更好的处理异常,不能只知道处理格式,还要了解异常的处理流程。

 

1.1异常处理的含义

 

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

image.png

 

1.2产生异常

 

(1)在程序运行的过程之中才会产生异常,而一旦程序执行中产生了异常之后将自动进行指定类型的异常类对象实例化处理。(Try 语句捕获的是实例化对象)


(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 可以观察在此类中提供有两个子类:

(1) Error :此时程序还未执行出现的错误,开发者无法处理;

(2) Exception: 程序中出现的异常,开发者可以处理 真正在开发之中所需要关注的就是 Exception;(如果产生了算数异常,那算数异常其实就是Exception 的子类)


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

 

1.3简化异常处理。

 

代码:

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 () ; 
} catch (NumberFormatException e ) { 
E.printstackTrace () ; 
} catch (  e ) { 
E.printstackTrace () ; 
} Finally {
  System.out.println ( "【F】 不管是否出现异常,我都会执行。“);
}  
System.out.println ( "【3】****** 程序执行完毕******") ;
}
}

执行结果错误:

image.png

结论:如果有多个异常捕获时,把捕获范围大的放在最后,此时也不用其他两个代码了,因为所有的异常都能向上转型。

代码:

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】****** 程序执行完毕******") ;
}

 

运行结果如下: 没传参数处理了,传的参数不是数字处理了,传的参数被除数为0也处理了。

image.png

image.png

当有不确定可能产生那些异常时,这种处理方式是最便捷的。但是这样处理也会产生一个问题(假设有一个项目,这个项目由五百多模块组成,如果出错,只会报一句:对不起我出错了,每个模块可能有8-10个错误,如果都用 Exception 语句,就会得到:对不起我出错了)。


这种异常的处理形式虽然方便,但描述的错误信息不明确,所以分开处理异常是一种更加明确的处理方式。


重点:在以后进行多个异常同时处理的时要把捕获范围大的异常放在捕获范围小的异常之后。

 

相关文章
|
7月前
|
自然语言处理
主流大模型结构
本文系统梳理主流大模型架构:Encoder-Decoder(如T5)、Decoder-Only(如GPT)、Encoder-Only(如BERT)和Prefix-Decoder(如GLM),详解GPT、LLaMA及中文模型发展,对比参数、上下文与特性,助力理解架构差异与选型策略,涵盖面试核心要点。
575 0
|
人工智能 移动开发 JavaScript
AI + 低代码技术揭秘(一):概述
VTJ.PRO 是一个基于 AI 的 Vue3 低代码开发平台,支持 Vue 单文件组件(SFC)与领域特定语言(DSL)之间的双向转换。它构建于 monorepo 架构之上,提供同步版本控制和全面的软件包生态系统,涵盖可视化设计、代码生成及多平台部署功能,同时兼容现有 Vue 3 工作流。平台特点包括双向代码流、AI 集成、Vue 3 基础支持、多平台适配以及低学习门槛等。通过模块化架构与智能工具,VTJ 加速开发流程并保持灵活性,适用于 Web、移动及跨平台项目。当前版本为 0.12.40,源码托管于 Gitee。
521 8
AI + 低代码技术揭秘(一):概述
|
12月前
|
SQL 运维 数据可视化
需求闭环追踪工具全方位解析:构建从需求到交付的完整追踪链路
在产品开发中,需求管理至关重要。本文探讨了需求闭环管理的核心问题与解决方案,涵盖需求追踪、变更同步、角色分工、反馈机制等内容,并提供实用工具与代码示例,助力团队实现高效协同与持续优化。
|
机器学习/深度学习 人工智能 自然语言处理
《解码AI大模型涌现能力:从量变到质变的智能跃迁》
人工智能大模型的涌现能力是当今科技的焦点。其产生依赖于四大关键因素:1) 海量数据提供丰富的训练素材,涵盖多样化的文本和图像;2) 强大算力如GPU、TPU加速模型训练,突破性能瓶颈;3) 精妙架构如Transformer引入自注意力机制,提升语义理解;4) 过参数化与优化策略使模型不断进化,展现未曾预设的能力。这些因素协同作用,推动大模型在复杂任务中表现出色,为未来带来更多可能。
1181 11
|
算法
数据结构与算法二:栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式
这篇文章讲解了栈的基本概念及其应用,并详细介绍了中缀表达式转换为后缀表达式的算法和实现步骤。
456 3
|
安全 算法 物联网
Wi-Fi安全协议的演变过程:从WEP到WPA3的全面解析
随着无线网络普及,Wi-Fi安全性问题日益重要。本文详细探讨了Wi-Fi安全协议的演进,包括最早的WEP协议及其缺陷,随后推出的WPA协议引入了TKIP等改进措施,WPA2则采用AES加密提供更高安全性,最新的WPA3进一步强化了密码保护和隐私安全,标志着Wi-Fi安全的重大升级。未来,Wi-Fi安全协议将继续进化,确保无线通信安全。
1662 7
|
算法 数据中心 Python
Python雪花代码
在这段代码中,`SnowFlake`类用于生成唯一的ID。每次调用 `generate_id`方法时,它都会生成一个新的、唯一的ID。这个ID由时间戳、数据中心ID、工作机器ID和序列号组成,确保了在不同的时间、不同的数据中心、不同的工作机器上都能生成唯一的ID。
535 1
|
弹性计算 监控 安全
在Gitee的开源项目部署上阿里云并发布部署脚本到Gitee代码仓库
在Gitee的开源项目部署上阿里云并发布部署脚本到Gitee代码仓库
659 0
|
传感器 芯片 C++
带你读《传感器系统:基础及应用》之三:放大器和滤波器 
本书包括传感器相关的数学、物理、电路等基础理论,介绍了相关的性能指标、性能选择以及集成到工程系统所需的软硬件,讲述了先进的传感器技术、分析建模、实际应用和设计研究实例。全书共12章,前面7章是传感器的基础知识,第8~11章分别讨论了不同种类传感器的结构及实际应用,第12章涉及先进的传感器技术。 本书可以作为高等学校测控技术与仪器、自动化、机电一体化、电气工程等专业高年级本科生和研究生教材,也可供相关科研和工程技术人员学习参考。