异常处理

article/2025/9/14 0:08:58

1.相关概念的介绍

1)异常情形:是指阻止当前方法或作用域继续执行的问题。

2)监控区域:一段可能产生异常的代码,并且后面跟着处理这些异常的代码。

3)try块:如果在方法的内部或者在方法内部调用某个方法抛出异常,这个方法将在抛出异常的过程中结束,如果不希望该方法结束,可以在方法内设置一个特殊的块来捕获异常,这个块就叫做try块

4)异常处理程序:抛出的异常必须在某个地方进行处理,处理这个异常的地方就叫异常处理程序。

5)异常处理理论上有两种基本模型:java支持终止模型,还有一种是恢复模型

a)终止模型:将假设错误非常关键,以至于程序无法返回到异常发生的地方继续执行,一旦异常被抛出,就表明错误已经无法挽回,也不能回来继续执行。

b)恢复模型:异常处理程序的工作室修正错误,然后重新尝试调用出问题的方法,并认为第二次能成功,恢复模型,通过希望异常被处理之后能继续执行程序。

注:恢复模型不实用的原因是它可能导致耦合:恢复性的处理程序需要了解异常抛出的地点,这势必要包含依赖于抛出位置的非通用性代码,而且增大了代码的编写和维护的困难。

6)异常说明:java提供了相应的语法,使你能够以礼貌的方式告知客户端程序员某个方法 可能会抛出异常,然后客户端程序员就可以进行相应的处理。

7)被检查的异常:在编译时被强制检查的异常。

8)异常链:在捕获一个异常后抛出另外一个异常,并且希望把原始异常的信息保存下来。

9)一个类的子类只能抛出比基类异常更具体的异常,而不能抛出比基类所抛出异常范围更大的异常。

2.异常参数

1)用new在堆上创建异常对象,此时也有存储空间的分配和构造器的调用,所有标准异常类都有两个构造器:一个是默认的构造器,一个是接受字符串为参数,能把相关信息放入异常对象的构造器。

2)关键字throw,它是在使用new创建异常对象之后,然后将此对象的引用传给throw。

3)Throwable是异常的根类,它能够抛出任意类型的Throwable对象。

3.异常处理程序

1)每个要捕的异常,得准备相应的处理程序,异常处理程序紧跟在try块之后,用关键字catch表示。

2)每个catch子句只能接受一个且仅仅接受一个特殊类型的参数的方法,可以在处理程序的内部使用标识符。

3)异常处理程序catch块必须紧跟在try块之后,当有异常被抛出的时候,异常处理机制将负责搜寻参数与异常类型相匹配的第一个程序。然后进入相应的catch子句进行执行,此时认为异常得到了处理。一旦catch子句结束,则处理程序的查找过程也会结束。

注:只有匹配的catch子句才能得到执行。

4.关于自定义异常

有的时候可以不用异常体系中的异常,可以自己创建一个异常类型,如果要自定义异常,则必须从已有的异常类进行继承,最好是选择意思相近的异常类继承,建立新的异常类型最简单的方法就是让编译器为你产生默认的构造器。

5.throws关键字(异常说明)

异常说明是方法声明的一部分,紧跟在形式参数列表之后,异常说明使用了附加的关键字throws,后面接一个所有潜在异常类型的参数列表。

6.在进行异常处理的时候,最好把Exception异常放在异常处理程序的末尾,防止它在其他子异常进行捕获的时候抢先捕获异常,因为它是所有异常类的根基类。

7.JAVA标准异常

1)Throwable是用来表示任何可以作为异常抛出的类,Throwable对象可以分为两个类型:

a)Error类型:用来表示编译时和系统的错误(除了特殊情况以外,一般不用关心)

b)Exception类型:是可以被抛出的基本类型。

8.finally关键字

1)无论异常是否被抛出,finally子句总是可以被执行

2)JAVA在什么时候才能用到finally:

当要把除内存之外的资源恢复到它们的初试状态时,就要用到finally子句。这种需要清理的资源包括:已经打开的文件或者网络链接,在屏幕上画的图形等等

3)当涉及到break或者continue语句的时候,finally子句也会得到执行,如果把finally子句和带标签的break和continue子句配合使用,在java里就没有必要使用goto语句

4)在return中使用finally(笔试的时候这个题很常见在异常处理的读程序题中)

因为finally子句总是会执行的,所以在一个方法中,可以从多个点返回,并且可以保证重要的清理工作仍然会执行。

9.异常的匹配

在抛出异常的时候,异常处理系统会按照代码的书写顺序找出“最近”的处理程序。找到匹配的处理程序之后,他就认为异常将得到处理,然后就不会继续的查找。

10.异常处理的一个重要原则就是:只有在指导如何处理的情况下才捕获异常;

异常处理的一个重要目标就是把错误处理的代码同错误发生的地点相分离。

11.异常应该在这些情况下被使用:

1)再恰当的级别处理问题,前提是要知道该如何处理的情况下才可以捕获异常

2)解决问题并且重新调用产生异常的方法

3)进行少许的修补,然后绕过异常发生的地方继续执行

4)用别的数据进行计算,以代替方法预计会返回的值

5)把当前运行环境下能做的事尽量做完,然后把相同的异常抛到更高的层次

6)把当前运行环境下能做的事尽量做完,然后把相同的异常抛到更低的层次

7)终止程序

8)进行简化

9)让类库和程序更加安全。

 


http://chatgpt.dhexx.cn/article/XplPKKa0.shtml

相关文章

异常及异常处理

一、异常的概念 定义: 异常指的是运行期出现的错误,也就是当程序开始执行以后执行期出现的错误。 处理态度: 当捕获到异常以后一定要做出处理,哪怕是把这个异常的错误信息打印出来,这是一种良好的编程习惯。 …

异常处理(throw、throws、try-catch)

Java异常处理的五个关键字try、catch、finally、throw、throws 1.抛出异常throw 在编写程序时,我们必须要考虑程序出现问题的情况。比如,在定义方法时,方法需要接收参数。那么,当调用方法使用接收到的参数时,首先需要…

SpringBoot+Axis2搭建WebService服务端

SpringBootAxis2搭建WebService服务端 之前用过Spring Axis2搭建过WebService项目,网上也有很多资料教程,最近需要在一个SpringBoot项目中添加Axis2的服务端,在网上找了很久,没有找到相关教程,最终经过大神朋友的指点…

AXI(2)完结

四、握手 4.1握手过程 所有的五个通道都是通过相同的VALID/READY握手处理来传输地址、数据和控制信息。 双向握手的机制意味着主机和从机之间传输数据时,都可以控制传输的速率,只有当VALID和READY同时为高电平时,传输才会发生。 发送方&a…

读Axis2用户帮助文档 (axis2中文文档)

作者:李红霞 时间:2006-10-19 声明:本文可以算作Axis2用户手册的翻译,但是翻译后的文本是经过作者理解写出来的,可能有些偏差,欢迎讨论。本文属作者原创,允许转载,但请注明出处。 英…

AXI 3.0 (1)

一、AXI简介 AMBA3.0中新增加了一种总线——AXI(Advanced eXtensible Interface,高级扩展接口)。 AMBA AXI 协议的目标是高性能、高频的系统设计,其包含了若干特性。 适合高带宽和低延迟的设计 提供高频操作,无需使…

Apache axis2 + Eclipse 开发 WebService

一、简介 Apache Axis2是下一代 Apache Axis。Axis2 虽然由 Axis 1.x 处理程序模型提供支持,但它具有更强的灵活性并可扩展到新的体系结构。Axis2 基于新的体系结构进行了全新编写,而且没有采用 Axis 1.x 的常用代码。支持开发 Axis2 的动力是探寻模块化…

Axis2与Web项目整合

一、说明: 上一篇介绍了通过使用Axis2来发布和调用WebService,但是是把WebService发布在Axis2提供的项目中,如果我们需要在自己的Web项目中来使用Axis2发布WebService该怎么做呢? 本篇即介绍在Web项目中使用Axis2来发布WebService. 二、具体…

Axis2中文手册

中文原文 http://tenn.javaeye.com/blog/100736 英文原文 http://ws.apache.org/axis2/1_0/userguide.html 概述 这个说明文档涉及以下内容:  如何使用 axis2 创建 web service 和客户端程序  如何定制一个模块 (Module) 并在 web service 中使用它  Sam…

axis2的使用(转载)

通过axis2发起WS请求时添加SOAP header 首先要获得一个ServiceClient对象,因为这个对象是org.apache.axis2.client.Stub里面定义的,所以你生成的stub里面应该直接就可以使用这个对象,或者调用stub的_getServiceClient()方法来获取这个对象。 …

SpringBoot2 整合 AXIS2 服务端和客户端

文章目录 一、AXIS2服务端1. 版本选型2.导入依赖3. services.xml4.Axis2配置类5.服务接口6.服务接口实现类7. FileCopyUtils工具类8. 测试验证 二、AXIS2服务端2.1. 客户端类2.2. 服务调用测试开源源码. 一、AXIS2服务端 1. 版本选型 阿健/框架版本spring-boot2.5.5axis21.7.…

WebService之Axis2系列教程(一)Axis2的下载、安装和使用

Axis2是目前比较流行的WebService引擎。WebService被应用在很多不同的场景。例如,可以使用WebService来发布服务端 Java类的方法,以便使用不同的客户端进行调用。这样可以有效地集成多种不同的技术来完成应用系统。WebService还经常被使用在SOA中&#x…

Axis2 webservice学习总结

一、学习课件目录: Axis2(WebService)培训资料1 - 百度文库 (baidu.com) WebService大讲堂之Axis2 - 百度文库 (baidu.com) 二、学习总结: Web Service是构建互联网分布式系统的基本部件,它是一个应用程序,它向外界暴露出一个…

小白轻松使用axis2构建webservice

引言: 使用axis2是来实现webservice接口是比较常见的,就我来说,如果要学一个首次接触东西,简单了解相关基础概念后,就希望自己能够简单快速的实现一个例子,在学习一门开发语言的时候,一个hello…

模板引擎 Velocity语法

Velocity是一个基于java的模板引擎(template engine),它允许任何人仅仅简单的使用模板语言(template language)来引用 由java代码定义的对象。作为一个比较完善的模板引擎,Velocity的功能是比较强大的&…

velocity 模板语法

velocity 模板语法 前言1. 访问1.1 变量1.2 属性1.3 方法 2. 指令2.1 #set 创建变量2.2 #if/#elseif/#else 分支控制2.3 #foreach 循环控制2.4 #include - 引入本地文件,文本展示2.5 #parse - 引入本地文件,velocity 解析后展示2.6 #stop - 停止模板解析…

finalize() 原理

finalize 方法的作用是: 如果对象在进行可达性分析后发现没有与 GC Roots 相连接的引用链,那他将会被第一次标记并且进行一次筛选,筛选的条件是此对象是否有必要执行 finalize 方法。 注意:当对象没有覆盖 finalize 方法&#xf…

finalize()

注:本文的目的并不是鼓励使用finalize方法,而是大致理清其作用、问题以及GC执行finalize的过程。 1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。fina…

java finalize方法详解

1. finalize的作用 finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法。finalize()与C中的析构函数不是对应的。C中的析构函数调用的时机是确定的(对象离开作用域或delete掉)&…

java中finalize()方法

finalize 垃圾回收机器(Garbage Collection),也叫GC,垃圾回收器主要有一下特点: 当对象不再被程序所使用的时候,垃圾回收器将会将其回收垃圾回收是在后台运行的,我们无法命令垃圾回收器马上回收资源&…