Java程序设计基础 课件 第10章 异常处理_第1页
Java程序设计基础 课件 第10章 异常处理_第2页
Java程序设计基础 课件 第10章 异常处理_第3页
Java程序设计基础 课件 第10章 异常处理_第4页
Java程序设计基础 课件 第10章 异常处理_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

第10章异常处理1教学目标(1)理解异常处理的概念(2)掌握异常的类型,并能够采用正确的方式进行定义(3)掌握对异常的处理,能够进行异常捕获并进行处理(4)掌握链式异常的创建(5)理解自定义异常的编写2内容310.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性内容410.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.1异常处理概述5对于一个Java应用程序,该程序应能在正常情况下正确运行,这是对程序的基本要求。然而,程序在执行时,也会碰到一些异常情况。例如,程序要求用户打开一个指定位置的文件,但是这个文件因为某些原因被移动到其他位置或被删除了。此时,JVM在执行该程序时会检测到该错误。如果程序员没有对该错误进行处理,那么JVM会简单地终止程序的执行。如果程序员希望对该错误进行处理以使得程序继续执行或者给出某种具体详细的提示信息再终止,那么程序员就需要使用Java语言提供的异常处理机制。10.1异常处理概述6在理想情况下,程序要求提供的数据应能正确提供,以确保程序的正确执行。例如,程序要求输入一个整数,用户应该输入整数,不能输入英文字母或标点符号。又如,程序要求打开的文件是始终存在的。在程序实际使用时,总是可能会出现一些错误的情况。如果当程序要求输入一个整数,而用户却不小心输入了一个英文字母,那么该程序在执行时,就会出现运行时错误。JVM会检测到这种错误并终止程序的执行,这种运行时错误就是异常。如果异常没有被程序员处理,那么程序将会由JVM直接终止。Java语言提供异常处理机制让程序员对异常进行处理以控制程序的继续运行或优雅终止(即给出友好详细的相关提示信息后再终止)。710-1Java语言提供异常处理机制让程序员对

[填空1]

进行处理以控制程序的

[填空2]

[填空3](即给出友好详细的相关提示信息后再终止)。作答填空题3分10.1异常处理概述8示例:程序清单10-1LuckNumber.java要求用户输入一个0-9之间的整数,然而没有其他机制确保用户输入的是0-9之间的整数。10.1异常处理概述9如果程序员希望在程序执行时出现异常后继续执行程序或者给出友好提示信息再终止程序,就需要对异常进行处理。示例:程序清单10-2LuckNumberExceptionHandle.javacatch块的头部catch(Exceptione)像一个带参数的方法头,Exception是参数类型,参数e可以在catch块中使用。参数e称为catch块参数。10.1异常处理概述10在Java语言中,异常处理用到的关键字除了程序清单10-2中的try、catch,还有:finally、throw、throws,下面对这几个关键字进行说明。(1)try--用于监听可能发生异常的代码。将可能发生异常的代码放在try块中,当try块内发生异常时,异常就被抛出。(2)catch--用于捕获和处理异常。catch用来捕获try语句块中发生的异常。catch块类似于带参数的方法定义,参数类型匹配抛出的异常。如果异常类型匹配,那么异常对象传递给catch块参数。10.1异常处理概述11(3)throw—用在方法体中,抛出异常对象,但不进行异常处理。throw语句的基本语法形式是:throw异常对象;(4)throws--用在方法头中,声明该方法可能抛出的异常,方法自身无需处理这些异常。使用throws子句的基本的语法结构是:[(修饰符)](返回值类型)(方法名)([参数列表])[throws异常类型1,异常类型2,…]{方法体}当方法可能会抛出某种异常时,用throws声明可能抛出的异常。一个方法可能产生多个异常,因此,throws后可以接多个异常类型,多个异常类型之间用逗号分隔。10.1异常处理概述12throws示例:一个方法method1可能产生IOException、ArithmeticException,方法method1自身不处理这两个异常,其方法头可如下声明:publicstaticvoidmethod1(inti)throwsIOException,ArithmeticException(5)finally—在异常处理中,无论有无异常出现,只要出现了finally块,finally块的语句总是会被执行的。finally块中的代码主要用于回收在try块里打开的资源(如数据库连接、网络连接和磁盘文件等),确保打开的资源得到释放。1310-2判断正误:throws关键字用于方法体中抛出异常对象,但不进行异常处理。这句话是否正确()正确错误AB提交单选题1分10.1异常处理概述14异常处理的基本流程:10.1异常处理概述15Java语言异常处理的完整形式是try-catch-finally形式,包括:try块、catch块、finally块。try块检测有无异常发生catch块捕获和处理异常对象finally块是可选的,一旦包含finally块,无论有无异常发生,finally块的代码都要执行。1610-3在方法执行过程中出现异常时,

[填空1]

块会捕获并处理异常。作答填空题1分10.1异常处理概述17try-catch-finally形式也有几种变化形式:1)无catch块的try-finally形式:只有try块和finally块,try块发生的异常由JVM默认处理。当try块中出现异常时,finally块的语句会执行,而finally块之后的语句不再执行。示例:TestException1.java2)无finally块的try-catch形式:如LuckNumberExceptionHandle.java3)多catch块的try-catch形式或try-catch-finally:在一个try块之后跟着多个catch块,每个catch块捕捉和处理一种类型的异常。try块后面可根据需要添加任意数量catch块,同一个异常类型对象不能被两个不同的catch块捕捉和处理。当try块发生异常时,产生的异常依次和后续catch块的异常类型进行匹配。示例:DivideWithException.java多个catch块进行异常处理时,如果不同的catch块捕捉和处理的异常类型具有父类-子类关系,这时,异常被指定的顺序是很重要的。处理异常子类的catch块应该放置在前面,处理异常父类的catch块要放置在后面。如果catch块的先后顺序不对,就会产生编译错误。示例:TestException2.java1810-4无catch块的try-finally形式,什么情况执行finally语句块?()始终会执行始终不执行try块发生异常时Try块未发生异常时ABCD提交单选题1分此题未设置答案,请点击右侧设置按钮1910-5右边程序错误的地方()如果没有catch模块,就不能有try模块。如果没有catch模块或finally模块,就不能有try模块。方法调用未出现异常,不能放在try模块内。没有错误ABCD提交publicclassDemo{publicstaticvoidmain(String[]args){try{System.out.println("WelcometoJava");}}}单选题1分2010-6下面这句话是否正确:如果不同的catch块捕捉和处理的异常类型具有父类-子类关系,这时异常被指定的顺序是很重要的。处理异常父类的catch块应该放置在前面,处理异常子类的catch块要放置在后面。()正确错误AB提交单选题1分内容2110.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.2异常的类型22异常类的根类是Throwable,其父类是Object,其直接子类是Error和Exception。根据继承体系,这些异常类可以分为两大类:系统错误类-Error、异常-ExceptionException:运行时异常、非运行时异常

10.2异常的类型23异常类的根类是Throwable,其父类是Object,其直接子类是Error和Exception。根据继承体系,这些异常类可以分为两大类:系统错误类-Error:由Java虚拟机抛出,描述内部系统错误。这类错误若发生,仅能通知用户错误发生,不能做其他事。异常-Exception:描述程序和外部环境引起的错误,这些错误由程序捕获和处理。Exception:运行时异常:RuntimeException及其子类,如ArithmeticException、ArrayIndexOutOfBoundsException非运行时异常:除RuntimeException及其子类以外的Exception子类10.2异常的类型24运行时异常非运行时异常异常描述ArithmeticException当出现异常的运算条件时,抛出此异常。例如,一个整数“除以零”时,抛出此类的一个实例。ArrayIndexOutOfBoundsException用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。NullPointerException当应用程序试图在需要对象的地方使用null时,抛出该异常。IllegalArgumentException抛出的异常表明向方法传递了一个不合法或不正确的参数。ClassCastException当试图将对象强制转换为不是实例的子类时,抛出该异常。ClassNotFoundException应用程序试图加载类时,找不到相应的类,抛出该异常。IOException与输入/输出出现的错误有关,当打开一个不存在的文件或试图越过文件尾读取数据时,会产生此异常FileNotFoundException文件未找到异常2510-7下面哪个类的实例是描述如下一种程序错误,如类型转换错误、访问数组越界、数值错误等?()RuntimeExceptionExceptionErrorThrowableABCD提交单选题1分2610-8一个________实例描述了由程序和外部环境引起的错误。这些错误可以被程序捕获和处理。RuntimeExceptionExceptionErrorThrowableABCD提交单选题1分10.2异常的类型27异常可分为两种类型:免检异常(unckeckedexception):Error、RuntimeException以及它们的子类必检异常(checkedexception):所有其他的异常类。必检是指Java编译器强制程序员对异常进行处理。免检是指Java编译器不强制程序员对异常进行处理。免检异常反映的是程序设计上不可恢复的逻辑错误,如除数为0的算术异常ArithmeticException这些异常是程序需纠正的逻辑错误。免检异常可能出现在程序的任意位置,为避免过多地编写异常处理代码,Java不强制要求进行异常处理。内容2810.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.3声明必检异常29必检异常除了使用try-catch块进行处理之外,还可以通过在方法头声明必检异常的形式进行处理。例如:publicvoidopenFile(Stringstr)throwsIOException,ClassCastException需要注意的是如果父类中的一个方法没有声明异常,那么该方法在子类中被重写时就不能声明异常。对于免检异常,虽然也可以在方法头中声明,但是没有必要。示例:程序清单10-4TestThrowsException.java3010-9如果父类中的一个方法没有声明异常,那么该方法在子类中被重写时就

[填空1]

(能/不能)声明异常。作答填空题1分内容3110.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.4重新抛出异常32如果一个catch块捕获了一个异常,不想处理它,或者只是希望调用它的方法注意到该异常,那么在catch块可以重新抛出该异常。重新拋出异常的语法形式如下所示:语句throwex重新抛出异常给调用方法,调用方法可以决定如何处理异常ex。3310-10如果一个catch块捕获了一个异常,不想处理它,或者只是希望调用它的方法注意到该异常,那么在

[填空1]

块可以重新抛出该异常。作答填空题1分内容3410.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.5链式异常3510.4节展示了在catch块重新抛出原始异常时。当需要同原始异常一起抛出一个新异常(带有附加信息)时,就产生了链式异常(chainedexception)。运行示例:程序清单10-5ChainedException.java内容3610.1异常处理概述10.2异常的类型10.3声明必检异常10.4重新抛出异常10.5链式异常10.6自定义异常10.7异常新特性10.6自定义异常37有时,预定义异常类不能够描述出现的错误。此时,程序员可以通过继承Exception类及其子类来定义自己的异常类。例如,创建一个继承Exception类的自定义异常类,如下所示:假定某个培训单位,要求学员年龄在10-50之间,程序清单10-6:AgeException.java3810-11程序员可以通过继承[填空1]类及其子类来定义自己的异常类作答填空题1分10.6自定义异常39Throwable类的方法列出了Throwable类的方法,自定义异常类也可以使用这些方法。10.6自定义异常Throwable类的printStackTrace()方法是一个非常重要的调试工具,它用于打印异常或错误的详细追踪信息到标准错误输出流(通常是控制台)。当程序中发生异常时,这个方法可以帮助开发者理解异常发生的上下文,即异常是在哪一行代码处被抛出的,以及异常传播的调用堆栈轨迹。堆栈跟踪信息包括以下几个部分:1.异常的类型和消息:显示异常的全限定类名以及通过构造函数传递的异常消息。2.异常发生的位置:显示异常最初被抛出的代码行号、所在的类名和方法名。3.调用序列:显示导致异常的方法调用序列,从发生异常的方法开始向上直到main方法或JVM入口点,每一行显示了方法名、类名、文件名和行号。这有助于复现异常发生时的执行路径。4010.6自定义异常Throwable类的toString()方法用于返回此throwable的简短描述。这个描述通常包括异常的类型和异常消息(如果有)。具体来说,toString()方法的返回值通常是由异常类的名称(带包名)和异常的本地化消息(通过getMessage()方法获得)组成,格式类似于:“类名:异常消息”。如果异常没有详细消息,返回的字符串可能只包含异常的类名。示例:TestExceptionInfo.java4110.6自定义异常42Exception类包含四个构造方法,自定义异常类的构造方法可以根据需要调用不同版本的父类构造方法。10.6自定义异常43程序清单10

温馨提示

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

评论

0/150

提交评论