Java编程技术与项目实战 课件 第9章异常处理_第1页
Java编程技术与项目实战 课件 第9章异常处理_第2页
Java编程技术与项目实战 课件 第9章异常处理_第3页
Java编程技术与项目实战 课件 第9章异常处理_第4页
Java编程技术与项目实战 课件 第9章异常处理_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第9章异常处理01开篇引导从前,有一匹小马,它生活在一个美丽的农场里。小马一直渴望能到河对岸去探索新的世界。有一天,小马终于鼓起勇气准备过河。它来到河边,看着河水湍急地流淌,心里有些害怕。小马小心翼翼地把一只蹄子伸进水里,河水的凉意让它打了个寒战。它不知道河水到底有多深,也不知道自己能不能安全地过河。就在小马犹豫不决的时候,它想起了妈妈曾经告诉它的话:“遇到困难不要害怕,要勇敢地去尝试。”于是,小马决定勇敢地迈出第一步。它慢慢地走进河里,河水越来越深,很快就没过了它的膝盖。小马心里开始紧张起来,但它还是继续往前走。突然,小马脚下一滑,差点摔倒。它惊恐地发现,河水变得更加湍急了,它被水流冲得有些站不稳。这就好比在Java编程中,当程序运行时可能会遇到各种意外情况,也就是异常。比如,文件读取失败、网络连接中断、数组越界等。这些异常就像小马过河时遇到的困难一样,如果不加以处理,程序就可能会崩溃。在Java中,我们可以使用try-catch语句来处理异常。就像小马在过河时,如果它有一些应对危险的方法,那么它就能更加安全地过河。小马在河里挣扎了一会儿,终于冷静下来。它想起了妈妈教它的游泳技巧,于是它努力地保持平衡,用四肢划水,慢慢地向对岸游去。同样,在Java程序中,当我们捕获到异常后,可以采取相应的措施来处理它。比如,当文件读取失败时,我们可以提示用户文件不存在或者重新尝试读取;当网络连接中断时,我们可以尝试重新连接或者使用备用网络。最后,小马成功地游到了河对岸,它兴奋地在草地上奔跑着,探索着这个新的世界。在Java编程中,通过合理地处理异常,我们可以让程序更加稳定、可靠,就像小马成功过河一样,能够顺利地完成各种任务。01开篇引导知识要点掌握程度相关知识异常概念掌握什么是异常异常体系常用异常类异常处理重点掌握异常捕获异常抛出自定义异常重点掌握自定义异常类的实现异常链断言掌握断言错误启用、禁用断言01开篇引导技能要点掌握程度应用方向什么是异常掌握应用开发Web开发try、catch、finally、throw、throws关键字的使用重点掌握应用开发Web开发服务器开发自定义异常重点掌握应用开发Web开发服务器开发启用和禁用断言掌握应用开发Web开发异常的概念-异常的概述02在日常生活中,若是身体某个部位不舒服了,该部位和正常情况相比有些不同,部位的功能受到病痛影响,我们会判断这个人生病了。在程序执行过程中,若是出现非预期的情况,最终导致JVM的非正常停止,我们称这个程序“生病了”,即发生异常了。Java的异常处理机制提供了一种结构化的方式来处理程序运行时可能出现的错误情况。它使得程序能够在出现问题时,以一种可控的方式进行处理,而不是突然崩溃。通过异常处理,程序员可以更好地预测和处理可能出现的问题,提高程序的稳定性和可靠性。在日常生活中,若是身体某个部位不舒服了,该部位和正常情况相比有些不同,部位的功能受到病痛影响,我们会判断这个人生病了。在程序执行过程中,若是出现非预期的情况,最终导致JVM的非正常停止,我们称这个程序“生病了”,即发生异常了。Java的异常处理机制提供了一种结构化的方式来处理程序运行时可能出现的错误情况。它使得程序能够在出现问题时,以一种可控的方式进行处理,而不是突然崩溃。通过异常处理,程序员可以更好地预测和处理可能出现的问题,提高程序的稳定性和可靠性。异常的概念-异常体系结构02Java语言有着强大的异常处理机制,能够将代码控制权从出错点转移到最近的异常处理器。异常机制能够帮助我们找到程序中的问题,Java中异常的基类是java.lang.Throwable,其下有两个异常分支:java.lang.Error和java.lang.Exception,平常代码中抛出的异常通常指java.lang.Exception。异常的概念-异常体系结构02Throwable体系说明:

Error:在正常环境中不希望被程序捕获的异常。Java运行中使用Error类型异常来显示与运行时系统本身相关的错误。堆栈溢出就是这种错误的一个例子。

Exception:用于表示代码程序可能出现的异常情况,它也是用来创建自定义异常类型类的父类表示异常。异常产生后程序员可以通过代码的方式纠正,使程序继续运行,是应该且必须要处理掉的。对于Exception而言,又可细分为运行时异常(RuntimeException)和非运行时异常,也称为未检查异常(UncheckedException)和检查异常(CheckedException)。异常的概念-异常体系结构02运行时异常都是RuntimeException类及其子类异常,这些异常是未检查异常,在程序中,您可以选择捕获和处理,也可以选择不理会。这些异常通常是由程序中的逻辑错误引起的,程序应从逻辑的角度尽可能避免此类异常。非运行时异常是RuntimeException以外的异常,也称为检查异常。它们都属于Exception类及其子类。对于这种异常,Java编译器强制要求我们必需对出现的这些异常进行捕获处理,否则程序无法通过编译(受Java编译器检查)。异常的概念-常用的异常类02Java预定义了很多异常类,位于java.lang包中,用于程序中不同异常的声明或抛出,你应该根据异常类型去合理处理或抛出合适的异常。如图3所示,通过API或编译工具如IntelliJIDEA,对Exception类查看其子类,默认快捷键为Ctrl+H。Java预定义了很多异常类,位于java.lang包中,用于程序中不同异常的声明或抛出,你应该根据异常类型去合理处理或抛出合适的异常,整理了一些常用的异常类及其说明,如下表所示异常类说明Exception异常层次结构的根类RuntimeException运行时异常,多数java.lang异常的根类ArithmeticException算术异常,如以零做除数ArraylndexOutOfBoundException数组大小小于或大于实际的数组大小NullPointerException尝试访问null对象成员,空指针异常ClassNotFoundException不能加载所需的类NumberFormatException数字转化格式异常,比如字符串到float型数字的转换无效异常的概念-常用的异常类02异常类说明IOExceptionI/O异常的根类FileNotFoundException找不到文件EOFException文件结束InterruptedException线程中断IllegalArgumentException方法接收到非法参数ClassCastException类型转换异常SQLException操作数据库异常异常处理-异常处理捕获03对于可能会抛出异常的代码块,可以使用try-with-resource方式进行处理,涉及的关键字为try、catch、finally。语法块分为trycatch及trycatchfinally。(1)try-catch:捕获异常语法结构如下:try{

将可能发生异常的代码放入try代码块中}catch(异常类型){

处理异常的手段,如:记录日志/打印异常信息/继续抛出异常}catch(异常类型){

处理异常的手段,如:记录日志/打印异常信息/继续抛出异常}....异常处理-异常处理捕获03【例9-1】读取文件以获取一个文件输入流,在传入文件路径时,可能参数为空;即使文件路径不为空,也不排除这个文件路径是无效的,所以,代码应该考虑这些问题并捕获这些问题,代码如下:importjava.io.FileInputStream;importjava.io.FileNotFoundException;publicstaticvoidreadFile(StringfilePath){try{FileInputStreamfis=newFileInputStream(filePath);}catch(NullPointerExceptione){System.out.println("文件名不能为空");}catch(FileNotFoundExceptione){System.out.println("文件路径异常");}}在上述代码中,try-catch,这种异常处理方式,要求多个catch中的异常不能相同,并且若catch中的多个异常之间有子父类异常的关系,那么子类异常要求在上面的catch处理,父类异常在下面的catch处理。不然话会出现编译错误。异常处理-异常处理捕获03小贴士:若知道代码可能会抛出异常,但这个异常程序员并不清楚会报哪个具体异常,或者不希望过细地处理异常时,或可能的异常情况较多时,可以统一捕获Exception异常,即只要代码可能有异常,都对其进行捕获。publicstaticvoidreadFile2(StringfilePath){try{FileInputStreamfis=newFileInputStream(filePath);}catch(Exceptione){System.out.println("程序错误");}}在上述代码中,个异常一次捕获,多次处理。这种操作精度更细,能够更好定位异常问题;多个异常一次捕获一次处理。异常处理-异常处理捕获03(2)try-catch-finally:不论异常是否出现或者被捕获,都希望执行某些操作,这些代码应该放在finally代码块中。语法结构如下: try{ //dosomething}catch(ExceptionClasse){ //handle}finally{ //handle }异常处理-异常处理捕获03【例9-2】在9-1案例中在使用完毕对象之后,期望将流进行关闭,并且关闭流这个操作不管代码是否出错,应当必须执行,否则它将一直占用内存资源,此时,就应该把这些必要操作放在finally代码块中,代码如下:publicstaticvoidreadFile3(StringfilePath){FileInputStreamfis=null;try{fis=newFileInputStream(filePath);}catch(Exceptione){System.out.println("程序错误");}finally{try{fis.close();}catch(IOExceptione){e.printStackTrace();}}}在上述代码中,你应该避免在finally子句中抛出异常,如果不能避免,那就在finally中再次使用try-catch。要注意的是,如果try代码块抛出异常,则该异常会被finally中的异常覆盖异常处理-异常抛出03在方法声明处使用throws关键字,表明该方法可能抛出的异常。这样调用该方法的代码就需要处理这些异常.语法结构如下:publicvoidmethodTest()throws异常类型1,异常类型2{//方法体}【例9-3】在9-1案例中使用try-catch进行捕获实现,在9-2中使用throws进行抛出异常实现,代码如下:importjava.io.FileInputStream;importjava.io.FileNotFoundException;publicclassThrowableDemo01{publicstaticvoidreadFile(StringfilePath)throwsNullPointerException,FileNotFoundException{FileInputStreamfis=newFileInputStream(filePath);}}在上述代码中,但是这个异常无法处理或不希望由自身方法直接处理,而是希望这些异常交由方法调用者处理时,需要在方法上使用throws声明。自定义异常-自定义异常的概述04JavaAPI提供了许多异常类,如果这些异常在你的编程场景中刚好适合,你就应该使用它们。除非没有一个标准的异常类能够满足你的需求,你才需要自定义异常类。自定义异常的概述:可以根据需要自定义异常类。自定义异常类通常继承自Exception或其子类。对于自定义异常类来说,最重要的部分就是它的类名,异常类名应做到见名知意。自定义异常-自定义异常的实现04建议为异常类定义两个构造方法,一个无参构造,一个字符串参数构造,用于描述异常信息。【例9-4】当一个方法抛出异常时,建议使用javadoc的@throws标签来文档化。以下是一个自定义的注册异常类,代码如下:publicclassRegisterExceptionextendsException{/***无参构造*/publicRegisterException(){}

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论