




已阅读5页,还剩59页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 2020 2 15 第五讲错误及异常处理 ErrorHandlingwithExceptions 2020 2 15 2 学习要点 异常的基础知识异常的处理自定义的异常 2020 2 15 3 Java对异常的处理 在程序运行中出现的某种可预期的 阻止程序正常运行的情况称为异常Java中通过面向对象的方式来处理异常如果某方法在执行过程中产生异常 则该方法将产生代表该异常的对象 并将其传递给运行时系统 这个过程称为抛出 throw 异常运行时系统寻找出相应的代码来处理这一异常 这一过程称为捕获 catch 异常 2020 2 15 4 在方法中处理异常的方式 捕获 catch 异常一个方法可以在方法内部提供处理异常的代码来捕获 catch 异常声明 Specify 异常如果一个方法内部不对异常进行捕获时 必须对异常进行声明 表示当前的方法将产生某种异常 此时方法抛出的异常将由调用它的方法来处理 2020 2 15 5 异常的分类 CheckedExceptions 校验异常 在编译过程中被检测的异常 校验异常必须被捕获或声明 RuntimeExceptions 运行时异常 在运行过程中被检测的异常 运行时异常可以不进行捕获和声明 2020 2 15 6 对异常进行捕获 对异常的捕获由三个部分组成try语句catch语句finally语句 2020 2 15 7 try语句 try语句的语法为 try Javastatements Javastatements 指一段可能产生一个或多个例外的代码 2020 2 15 8 catch语句 catch语句的语法为catch SomeThrowableObjectvariableName Javastatements SomeThrowableObject 声明了异常处理的类型 它必须是Throwable类的子类 variableName 运行时在try代码块中抛出的异常对象 Javastatements 指一段用来处理异常的代码 2020 2 15 9 finally语句 finally语句的语法finally Javastatements finally语句为Java程序提供了统一的出口在try语句限定的代码中 如果某段代码抛出了异常 其后的代码将不再被执行 无论try所指定的代码是否抛出异常 finally所指定的代码都将被执行 2020 2 15 10 捕获异常的注意事项 catch语句和finally语句必须和try配对出现try语句之后必须存在catch语句或者finally语句或者两者同时存在 try语句不可以脱离catch语句和finally语句而独立存在 2020 2 15 11 catch语句不可省略的情况 当try语句包含的代码块中抛出了checkedException时 catch语句不可省略此时finally语句可以被省略 2020 2 15 12 捕获异常时的注意事项 try语句和catch语句必须成对出现finally语句可以被省略捕获例外的完整语法为 或者 try catch catch try catch catch finally 2020 2 15 13 可以省略catch语句的情况 当try语句中的代码没有抛出任何必须捕获的异常时 catch语句可以被省略 但是至少必须存在catch语句和finally语句中的一个语句 这种方法是很有必要的 代码中有可能抛出运行时异常 当前的写法主要为运行时异常提供统一的出口 2020 2 15 14 举例 publicclassTestA publicstaticvoidmethodA try System out println abcd finally System out println 123456 publicstaticvoidmain String args methodA 2020 2 15 15 示例说明 上例中用红色标出的部分没有抛出任何必须捕获的例外 此时省略了catch语句 在编译和运行时都没有产生任何信息上例的运行结果如下 abcd123456 2020 2 15 16 捕获异常举例 importjava io publicclassCatchException publicstaticvoidmain String args try FileInputStreamin newFileInputStream test txt System out println inproctry catch FileNotFoundExceptione System out println inproccatch finally System out println inprocfinally 2020 2 15 17 运行结果 如果存在文件test txt时将输出 inproctryinprocfinally如果文件test txt文件不存在时将输出 inproccatchinprocfinally 2020 2 15 18 示例说明 类FileInputStream在指定文件不存在时将抛出FileNotFoundException 此时将不执行System out println inproctry 语句无论是否抛出例外 finally语句所包含的代码块 System out println inprocfinally 都将被执行 2020 2 15 19 finally语句的执行举例 1 try Filef newFile test txt FileInputStreamin newFileInputStream f System out println inproctry catch FileNotFoundExceptione return finally System out println inprocfinally 2020 2 15 20 示例说明 上例中如果抛出例外 则在catch语句中将执行return语句表示调用结束 但是此时的结果为 inprocfinallyreturn语句被执行前 Java运行时环境先执行finally语句 2020 2 15 21 finally语句的执行举例 2 try Filef newFile test txt FileInputStreamin newFileInputStream f System out println inproctry return catch FileNotFoundExceptione System out println inproccatch finally System out println inprocfinally 2020 2 15 22 示例说明 上例如果没有抛出FileNotFoundException时 将执行打印语句 和return语句 此时的运行结果为 inproctryinprocfinally在return语句执行前 Java运行时环境先执行了finally语句 23 finally语句小结 finally语句 总是 被执行不执行finally语句的唯一情况是Java虚拟机关闭 如使用System exit 或者是机器关闭 2020 2 15 24 捕获异常的规则 在捕获异常时 catch语句可能存在多个 此时Java运行时系统将按照catch语句的顺序依次进行匹配直到找到匹配的catch语句为止 匹配的catch语句表示catch语句中处理的例外类型和生成的例外对象类型完全一致catch语句中处理的例外类型为生成的例外对象类型的父类 2020 2 15 25 举例 try Filef newFile test txt FileInputStreamin newFileInputStream f intr in read in close catch IOExceptione catch FileNotFoundExceptione 2020 2 15 26 示例说明 在创建FileInputStream时 Java运行时系统将抛出FileNotFoundException在执行FileInputStream中的read 方法时 Java运行时系统将抛出IOExceptionFileNotFoundException为IOException的子类系统如果抛出FileNotFoundException时 Java运行时系统首先和第一个catch语句相匹配 IOException能够与FileNotFoundException匹配 Java运行时系统将不再和之后的catch语句进行匹配此时第二个catch语句将不再执行 2020 2 15 27 捕获异常的规则 2 在使用catch语句时 仅仅能够捕获try语句中的代码抛出的异常类型本身或者异常类型的父类如果catch语句中捕获了try语句中的代码不可能抛出的例外时 代码将不能编译通过如果catch语句中使用如下方式 catch Exceptione 在任何情况下编译都能够通过 2020 2 15 28 举例 publicclassCatchTest staticpublicvoidmethodA try System out println abcd catch FileNotFoundExceptione publicstaticvoidmain String args methodA 2020 2 15 29 示例说明 上例编译不能通过编译的错误信息如下 CatchTest java 10 exceptionjava io FileNotFoundExceptionisneverthrowninbodyofcorrespondingtrystatement catch FileNotFoundExceptione 如果将FileNotFoundException替换为Exception编译将可以通过 2020 2 15 30 异常的声明 声明异常使用throws字句进行声明异常的语法如下ReturnTypemethodName paramList throwsExceptionListExceptionList为用逗号隔开的异常类型 2020 2 15 31 声明异常举例 importjava io publicclassCatchException voidThrowException throwsFileNotFoundException Filef newFile test txt FileInputStreamin newFileInputStream f System out println inproc 2020 2 15 32 异常的抛出 throw 在捕获异常之前必须有一段代码生成了一个异常对象 并把它抛出任何Java代码都可以抛出异常可以从用户编写的代码中抛出可以从JDK的类中抛出可以从Java运行时系统中抛出 2020 2 15 33 抛出异常的语法 抛出异常使用的关键字为throw 它的语法格式为throwsomeThrowableObject someThrowableObject 一个可被抛出的对象someThrowableObject必须是Throwable类的子类 如果某方法内部抛出了异常对象 此异常对象必须被声明 2020 2 15 34 从方法中抛出异常举例 publicObjectpop throwsEmptyStackException Objectobj if size 0 thrownewEmptyStackException obj objectAt size 1 setObjectAt size 1 null size returnobj 抛出的对象必须是Throwable类的子类 方法中有例外抛出时必须在方法中声明 2020 2 15 35 抛出异常的注意事项 紧跟throw语句之后不能再有任何语句 否则在编译时不能通过当throw语句被执行后将执行捕获语句 因此throw语句之后的任何语句将没有任何执行的可能 2020 2 15 36 举例 publicObjectpop throwsEmptyStackException Objectobj if size 0 thrownewEmptyStackException System out println afterprocthrow obj objectAt size 1 setObjectAt size 1 null size returnobj 2020 2 15 37 示例说明 上例是某类中的一个方法片断 上例在编译时将不能通过编译时的错误信息为 TestA java 6 unreachablestatementSystem out println afterprocthrow 1error 2020 2 15 38 异常的传递 如果一个方法内的语句抛出了异常 通常该异常会被抛到调用此方法的方法中 如果某异常没有在调用方法中处理 它会继续抛给这个调用方法的调用者这个过程将一直持续到此异常被捕获如果异常被抛到main 方法中 而main 方法也未曾对异常处理 则程序将非法终止 2020 2 15 39 Throwable类及子类的层次结构 2020 2 15 40 Java中任何可抛出的对象都是Throwabled的子类Throwable有两个直接子类ErrorException Throwable 2020 2 15 41 Error 运行中遇到不可能或难以恢复的问题时 系统将抛出Error Java代码中不对Error进行处理 2020 2 15 42 Exception是异常的基本类在用户编写的程序中抛出或捕获的对象全部都是Exception的直接或间接的子类 Exception 2020 2 15 43 Exception的类别 RuntimeException类是运行时异常的基本类RuntimeException类的所有子类都属于运行时异常运行时异常以外的其它所有的Exception类的子类都为CheckedExceptions 2020 2 15 44 常见的运行时异常 ArithmeticExceptionClassCastExceptionNullPointerExceptionNegativeArraySizeExceptionNumberFormatExceptionArrayIndexOutOfBoundsExceptionSecurityException 2020 2 15 45 ArithmeticExcepion 试图进行整数被零除运算时 Java运行时环境将抛出ArithmeticException例 inti 12 0 当进行double类型 float类型数据被零除运算时 Java运行时环境不会抛出例外 2020 2 15 46 ClassCastException 试图将某对象强制转换成为其子类或者其他类的实例时 Java运行时环境将抛出ClassCastException例 Collectionc newList Vectorv Vector c 2020 2 15 47 NullPointerException 试图访问一个没有被实例化的对象的成员变量或方法时 Java运行时环境将抛出NullPointerException例 Dated null System out println d toString 2020 2 15 48 NegativeArraySizeException 试图使用负数作为维数创建一个数组时 Java运行时系统将抛出NegativeArraySizeException例 intnum 3 String strs newString num 2020 2 15 49 ArrayIndexOutOfBondsException 试图访问的数组元素超过了数组大小时 Java运行时环境将抛出ArrayIndexOutOfBondsException例 String strs newString 4 System out println strs 4 2020 2 15 50 NumberFormatException 试图将一个不表示数字的字符串转换成数字时 Java运行时环境将抛出NumberFormatException例 Integer parseInt test 2020 2 15 51 SecurityException SecurityException通常在浏览器内抛出 任何试图进行以下操作 除非被允许 都会抛出SecurityException访问本地文件访问一个不是为Applet服务的主机在运行时环境中执行另一个程序 2020 2 15 52 方法重载与异常 如果父类方法中抛出了某种例外 子类重载该方法时 只能抛出父类方法中的异常或异常的子类 2020 2 15 53 方法重载与异常举例 publicclassTestA publicvoidmethodAthrowsIOException publicclassTestBextendsTestA publicvoidmethodAthrowsException 2020 2 15 54 示例说明 上例中类TestB编译不能通过编译错误信息如下 TestB java 3 methodA inTestBcannotoverridemethodA inTestA overriddenmethoddoesnotthrowjava lang ExceptionpublicvoidmethodA throwsException 1error 2020 2 15 55 自定义异常 通过扩展Exception类可以创建用户定义的异常 2020 2 15 56 publicclassNumberExceptionextendsException Stringinfo publicNumberException info itisawrongnumber publicNumberException intnumber info Number number isnotpermitted publicStringtoString returnthis info 自定义异常举例 自定义的异常是Exception类的子类 2020 2 15 57 publicclassExceptionDemo staticvoidcheck inti intbalance throwsNumberException if i balance thrownewNumberException elseif i 0 thrownewNumberException i else System out println exitwithoutexception 2020 2 15 58 publicstaticvoidmain Stri
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025农产品买卖合同模板
- 水闸消防安全知识培训课件
- 水粉画草丛中的鸭子课件
- 乡镇水源保护方案
- 小升初语文古诗鉴赏知识点衔接-《曲》练习(含答案)
- 桥梁检测设备选型与使用方案
- 学生宿舍节能设计与技术应用方案
- 水电验收课件第五元素
- 水电站业务知识培训课件简报
- 二零二五年度新能源设备采购及运营合作协议
- 陕西省特种设备隐患排查清单(2025年)
- 快递行业交通安全培训
- 货款转让协议书
- 燃气公司加气站操作规程及安全要求
- 装修砸墙安全协议书
- DB4407∕T 70-2021 地理标志产品 新会陈皮
- 送水工劳务合同协议
- 读博协议和合同
- 2025CACA子宫颈癌诊疗指南解读
- 2025年第34届全国中学生物理竞赛预赛试卷及答案(完整版)
- 骨科护理10分钟小讲课
评论
0/150
提交评论