版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第11章异常处理在开发项目的过程中,核心业务代码只占了20%~30%左右的时间,而用于开发容错代码的时间却高达70%~80%,这大大降低了开发效率。Java中提供的异常处理机制,可以很好地在一定程度上解决这个问题。通过使用异常处理机制,可以使容错代码的开发变得轻松愉快。本章将对Java中的异常处理机制进行详细的介绍,主要包括异常处理的基本知识、异常的层次结构、异常的匹配、定义自己的异常、再次抛出异常、断言等内容。11.1异常处理的基本知识本节主要介绍捕获与处理异常的基本语法,主要包括try/catch/finally语句的基本使用、异常的传播过程及实际开发中需要注意的问题等内容。11.1.1try和catch捕获异常本小节将介绍如捕获异常以及如何对异常进行处理,主要包括如下两个方面的内容。捕获并处理异常的语法try-catch语句的执行流程1.捕获并处理异常的语法2.try-catch语句的执行流程11.1.2异常的传播过程上一小节介绍了有catch语句块捕获异常情况下异常处理的过程,如果没有catch语句块捕获异常,异常将沿着方法的调用栈一直向上传播。如果传播的过程中一直没有catch语句块捕获,则最终传播到main方法,最后从main方法抛出,由Java运行时环境(JRE)来处理。11.1.3finally语句块的使用某些特殊情况下,经常需要用到finally语句块,本小节将详细介绍finally语句块的使用,主要包括如下两点内容。finally语句块的基本使用规则finally语句块的作用1.finally语句块的基本使用规则2.finally语句块的作用11.2异常的层次结构当异常发生时,Java会将该异常包装成一个异常类的对象,并将其引用作为参数传递给相应的catch语句,这样在catch语句中就可以对这个异常对象进行操作。本节将系统的介绍异常类的层次结构,主要内容包括捕获异常与未捕获异常两个方面。11.2.1捕获异常Java类库中有一个java.lang.Throwable类,其继承自java.lang.Object类,是所有异常类的超类。11.2.2未捕获异常在图11.12显示的继承树上,除了捕获异常以外的部分都是未捕获异常,即Error类及其子类以及RuntimeExcepiton类及其子类。继承自Error的类一般代表由硬件运行失败导致的严重错误,而其从严格意义上将,不属于异常,因为其不属于Exception类的子类。一般来说,程序不能从Error中恢复,例如内存耗尽就是一个属于Error的情况,这种情况是无法恢复的。而RuntimeException类的子类通常是指一些程序运行时错误引起的异常,所以也可以不对其进行处理。11.3再次抛出异常实际开发中,不可能所有的异常在其产生的位置都能立即进行处理,有时需要上报,由上一级程序进行处理。这里所谓的上报就是异常的再次抛出,本节主要对这方面的内容进行介绍,主要包括异常的再抛出的含义、显性再抛出、隐性再抛出等内容。11.3.1什么是异常的再抛出异常的再抛出与人类社会解决问题的模型是很相似的。打个比方,在某厂的某部门某车间内发生了一些状况,车间内部就去解决,但是如果状况很大,车间内部解决不了,车间就会将此事上报,推给部门进行处理,若部门解决不了继续向上推,直至某个地方能将此事解决。11.3.2显性再抛出一旦方法有可能抛出捕获异常,则在方法声明时需要特别指出,否则编译报错。而通过编写代码将catch语句捕获的异常再次抛出,就称为显性再抛出。本小节将主要介绍以下两方面的内容。显性再抛出的语法规则声明异常抛出需要注意的问题1.显性再抛出的语法规则2.声明异常抛出需要注意的问题11.3.3隐性再抛出通过前面介绍的显性再抛出。如果只是想把收到的异常再抛出,不必使用显性再抛出,使用隐性再抛出即可。隐性再抛出语法比显性再抛出简单,效果是相同的,隐性与显性再抛出在语法上有如下几点异同。若抛出的是捕获异常,隐性与显性再抛出都必须在方法声明中明确声明。显性再抛出是在方法体中使用throw语句将产生的异常抛出,隐性再抛出是在方法体中没有任何抛出异常的语句,若产生异常将自动抛出。11.4定义自己的异常从前面的例子中可以看出,用throw语句抛出的异常不一定是捕获的,也可以是自己创建的。Java中每个异常类都代表一种特定的情况,有时系统中已有的异常类型不能满足使用的需要。这时,就需要抛出自定义的异常对象,本节将介绍如何创建以及使用自己定义的异常类,以及显性再抛出在实际开发中的意义与作用。11.4.1创建自己的异常类本小节主要介绍如何创建自己的异常类,内容有如下两个方面。自定义异常类的途径Exception类的几个常用方法1.自定义异常类的途径2.Exception类的几个常用方法11.4.2使用自定义的异常类前面举的例子大部分都是调用类库中可能抛出异常的方法,那其实是在享受别人的劳动成果。开发人员只要把有可能产生异常的方法调用放在try语句块中,发生异常后再处理即可。而判断何时产生异常,在什么情况下产生哪种异常的代码并不需要开发,而那些实现规则的代码要复杂得多。自定义异常类的一大功能就是当开发人员需要自己开发实现某些规则、功能的代码时,一旦情况不满足要求,向外抛出自己的异常。11.5异常的匹配从前面的例子中可以看出,try-catch语句中可以有任意多个catch语句块,但是这些catch语句块并不是随意放置的。为了异常匹配的需要,其顺序有严格的规定,本节将为读者介绍这方面的内容,主要包括同时捕获多种异常、多个catch语句的先后顺序两个方面。11.5.1同时捕获多种异常前面章节中已经介绍过,在try-catch语句捕获并处理异常时,可以为catch语句块指定处理的异常类型,实际上在单个catch语句中可以处理多种类型的异常,规则如下。指定处理的异常类型若没有任何子类,则只能捕获指定的异常类型。指定处理的异常类型若有子类,则指定类型及其子类的异常都可以捕获。11.5.2多个catch语句的先后顺序前面的小节已经介绍过,一个catch语句块可以捕获多种类型的异常。若try语句后跟多个catch语句,并且各自指定的异常类型中,相互之间有派生关系,这时catch语句的先后顺序就必须满足一定的规则,否则有可能编译失败,规则如下。若多个catch语句块中所指定的异常类型相互有派生关系,那么必须将子类型的异常写在上面,父类型的异常写在下面。若为级别相同或者没有任何派生关系的异常类型,其ca
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026四川广安经济技术开发区恒生投资开发有限公司第一次人才招聘2人备考题库及答案详解(基础+提升)
- 2026广东江门市五邑通智能卡有限公司招聘1人备考题库含答案详解(黄金题型)
- 2026年天门市人才引进63人备考题库及答案详解(名师系列)
- 2026河南华北水电工程监理有限公司招聘26人备考题库及答案详解(基础+提升)
- 2026滨州苍龙湖实验学校教师招聘备考题库(39人)附答案详解(研优卷)
- 2026广东广州市黄埔区联和街暹岗社区经济联合社招聘税务及三资管理岗人员1人备考题库含答案详解(完整版)
- 2026年德州宁津县第一中学公开招聘教师备考题库(7名)附答案详解(夺分金卷)
- 2026四川内江市资中县第二人民医院招聘编外人员28人笔试参考题库及答案解析
- 2026中国电力工程顾问集团华东电力设计院有限公司暑期实习生笔试备考题库及答案解析
- 施工临时发电机组施工方案
- 2026上半年生态环境部卫星环境应用中心招聘15人笔试备考题库及答案解析
- 2025年建筑资料员招聘笔试试题及答案
- 2026年新入团考试知识大全(必考知识点+完整题库+标准答案)
- 2026杭州市萧山区招录高学历事业人员50人笔试参考题库及答案解析
- 2026年1月浙江省高考(首考)思想政治试题(含答案)
- 2026年大学后勤集团办公室文秘招聘笔试写作题
- 地灾评估专家
- DB6101∕T 3094-2020 城市生产建设项目水土保持技术规范
- 螺栓连接实验-2015.11.20
- DB32-T 3260-2017水利工程施工图设计文件编制规范-(高清现行)
- JJF 1941-2021 光学仪器检具校准规范
评论
0/150
提交评论