java概述课件 13 异常处理.ppt_第1页
java概述课件 13 异常处理.ppt_第2页
java概述课件 13 异常处理.ppt_第3页
java概述课件 13 异常处理.ppt_第4页
java概述课件 13 异常处理.ppt_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

1,第13章 异常处理,2,引言,当程序运行遇到运行时错误,该程序将非正常终止。 怎样处理运行时错误,使得该程序可以继续运行或平稳终止? 这是本章中将要讨论的主题。,3,学习目标,了解异常和异常处理的概况(13.2). 探究使用异常处理的优点 (13.3). 区别异常的类型:Error(错误,致命的)和Exception(异常,非致命的)以及必检和免检异常 (13.4). 在方法头中声明异常(13.5.1). 在方法中抛出异常 (13.5.2). 编写try-catch块处理异常 (13.5.3). 解释异常是如何传播的(13.5.3). 在 try-catch块中使用finally子句(13.6). 只为非预期错误使用异常 (13.7). 在catch块中重新抛出异常 (13.8). 创建链式异常(13.9). 定义自定制的异常类 (13.10).,4,异常处理概述,Quotient,Run,QuotientWithIf,Run,QuotientWithException,Run,演示运行时错误,用if语句排除该错误,用异常处理该问题,5,异常的优势,QuotientWithMethod,Run,现在我们可以看到用异常处理的优势,它能使方法抛出一个异常给它的调用者 如果没有这种能力,那么被调用的方法就必须自己处理异常或者终止该程序,如果在被调用的方法里发生运行时错误,又怎么办?,6,处理输入不匹配异常InputMismatchException,InputMismatchExceptionDemo,Run,通过处理输入不匹配异常InputMismatchException,我们的程序将会一直请求输入直到输入正确为止。,7,异常类型,8,系统错误,系统错误(error)由JVM抛出,并表示为Error类。Error类表示内部系统错误,这种错误很少发生。如果不幸发生了的话,我们几乎不能做什么来补救,只能通知用户并试图尽量稳妥地终止程序。,9,异常,异常(Exception)描述由于程序和外部环境所引起的错误,这些错误可被程序所捕获并处理。,10,运行时异常,运行时异常RuntimeException是由于程序错误所引起,比如错误的造型、访问越界的数组以及数字错误,11,必检异常与免检异常,RuntimeException,Error和他们的子类都称为免检异常 其他异常被称为必检异常,意思是指编译器会强制程序员检查并处理他们,12,免检异常,在大多数情况下,免检异常都会反映出程序有不可恢复的逻辑错误。例如: 如果通过一个引用变量访问一个对象之前未给该对象赋值,就会抛出空指针异常NullPointerException; 如果访问一个数组的越界元素,就会抛出下标越界异常IndexOutOfBoundsException。 这些都是程序中必须纠正的逻辑错误。免检异常可能在程序的任何一个地方出现。 为了避免过多地使用try-catch块,Java语言不允许编写代码捕获或声明免检异常。,13,免检异常,免检异常,14,声明、抛出和捕获异常,15,声明异常,每个方法都必须声明它可能抛出的必检异常,称为声明异常,如: public void myMethod() throws IOException 或 public void myMethod() throws IOException, OtherException,16,抛出异常,当程序检测到错误时,程序可以创建一个恰当的异常类型的实例并抛出它,这就称为抛出异常,如: throw new TheException(); 或 TheException ex = new TheException(); throw ex;,17,抛出异常例子,/* Set a new radius */ public void setRadius(double newRadius) throws IllegalArgumentException if (newRadius = 0) radius = newRadius; else throw new IllegalArgumentException( “Radius cannot be negative“); ,18,捕获异常,try / Statements that may throw exceptions statements; catch (Exception1 exVar1) handler for exception1; catch (Exception2 exVar2) handler for exception2; . catch (ExceptionN exVar3) handler for exceptionN; ,19,捕获异常例子,20,捕获、声明必检异常,Java强迫程序员处理必检异常。如果方法声明了一个必检异常,就必须在try-catch块中调用,或者在调用方法中声明要抛出异常。例如,假定方法P1调用P2,而P2可能会抛出一个必检异常。那么代码必须写成下述格式,21,例:声明,抛出,并捕获异常,本示例修改了第8章所定义的Circle类的setRadius方法,来演示怎样声明、抛出和捕获异常。 如果半径是负数,新的setRadius方法将抛出一个异常。,TestCircleWithException,Run,CircleWithException,22,重新抛出异常,try statements; catch(TheException ex) 在退出以前执行一些操作; throw ex; ,23,finally 语句,try statements; catch(TheException ex) handling ex; finally finalStatements; ,24,跟踪程序的执行,try statements; catch(TheException ex) handling ex; finally finalStatements; Next statement;,假设执行这些语句不会发生异常,25,跟踪程序的执行,try statements; catch(TheException ex) handling ex; finally finalStatements; Next statement;,最终块总是要执行,26,跟踪程序的执行,try statements; catch(TheException ex) handling ex; finally finalStatements; Next statement;,方法中下边的语句要执行,27,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; finally finalStatements; Next statement;,假设语句2要抛出类型为Exception1 的异常,28,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; finally finalStatements; Next statement;,此处处理Exception1异常,29,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; finally finalStatements; Next statement;,最终块始终要执行,30,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; finally finalStatements; Next statement;,现在执行方法中下边的语句,31,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; catch(Exception2 ex) handling ex; throw ex; finally finalStatements; Next statement;,假设语句2抛出类型为Exception2的异常,32,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; catch(Exception2 ex) handling ex; throw ex; finally finalStatements; Next statement;,此处处理Exception2异常,33,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; catch(Exception2 ex) handling ex; throw ex; finally finalStatements; Next statement;,执行最终块,34,跟踪程序的执行,try statement1; statement2; statement3; catch(Exception1 ex) handling ex; catch(Exception2 ex) handling ex; throw ex; finally finalStatements; Next statement;,再次抛出异常,控制权转移给调用者,35,何时使用异常处理,异常处理将错误处理代码从正常的程序设计任务中分离出来,这样,可以使得程序更易读和更易修改 但是,应该注意,由于异常处理需要初始化新的异常对象,需要从调用栈返回,而且还需要沿着方法调用的链来传播异常以便找到它的异常处理器,所以,异常处理常常需要更多的时间和资源。,36,何时去抛出异常,异常出现在方法中。如果想让该方法的调用者处理异常,应该创建一个异常对象并将其抛出。如果能在发生异常的方法中处理异常,那么就不需要抛出或使用异常。,37,何时用异常,在代码中,什么时候用try-catch块呢?当必须处理不可预料的错误状况时应该使用它。不要用try-catch块处理简单的、可预料的情况,例如:,try System.out.println(refVar.toString(); catch (NullPointerException ex) System.out.println(“refVar is null“); ,38,何时用异常,最好改成,if (refVar != null) System.out.println(refVar.toString(); else System.out.println(“refVar is null“);,39,定义定制

温馨提示

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

评论

0/150

提交评论