异常捕获和枚举类型.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《异常捕获和枚举类型.ppt》由会员分享,可在线阅读,更多相关《异常捕获和枚举类型.ppt(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、异常处理异常处理补充:枚举类型补充:枚举类型语法错误,编译错误,逻辑错误 Syntax errors(语语法法错误错误)-编译过编译过程中出程中出现现的的错错误误,通,通过编译过编译器器检测检测。Runtime errors(运行(运行时错误时错误)引起程序非正常中)引起程序非正常中断的断的错误错误。Logic errors(逻辑错误逻辑错误)指程序没有按期望的要)指程序没有按期望的要求求执执行。行。运行错误 如果这行出现异常,将跳过其余的行,程序终止。如果这行出现异常,将跳过其余的行,程序终止。捕获运行错误捕获运行错误异常类(Exception Classes)page 446系统错误(Sy
2、stem Errors)System errors 是由是由JAVA虚虚拟拟机抛出并在机抛出并在Error类类中描述的。中描述的。Error类描述类描述内部的系统错误。这种错内部的系统错误。这种错误很少发生,如果发生,误很少发生,如果发生,除了通知用户以及尽量稳除了通知用户以及尽量稳妥地结束程序外,几乎什妥地结束程序外,几乎什么也不能做。么也不能做。page 446异常(Exceptions)Exceptions 是由是由Exception类类描述的。描述的。Exception类描述由程序类描述由程序和外部环境引起的错误,和外部环境引起的错误,这些错误能通过程序捕这些错误能通过程序捕获和处理。
3、获和处理。page 446Runtime ExceptionsRuntime exceptions 是由是由 RuntimeException 类描述编类描述编程错误,比如不合适的转换,程错误,比如不合适的转换,访问一个越界数值或数值错访问一个越界数值或数值错误等。运行异常通常由误等。运行异常通常由JAVA虚拟机抛出。虚拟机抛出。page 446必检异常和免检异常RuntimeException,Error 以及它们的子类以及它们的子类都称为免检异常(都称为免检异常(unchecked exceptions).所有其他异常都称为必检异常(所有其他异常都称为必检异常(checked except
4、ions).unchecked exception是程序设计中不可重获的逻辑错误。是程序设计中不可重获的逻辑错误。checked exception编译器强制程序员检查并处理异常编译器强制程序员检查并处理异常必检异常和免检异常Unchecked ExceptionsJava 不能保证你的代不能保证你的代码能够捕获或声明码能够捕获或声明unchecked exceptions.说明说明:Exception类及子类及子类都是是可以捕获的,类都是是可以捕获的,但是但是JVM只强制你捕获只强制你捕获checked Excepions.声明、抛出、捕获异常catch exceptiondeclare e
5、xceptionthrow exception声明异常声明异常声明异常(声明异常(declaring exceptions)-每个方法每个方法都必都必须说须说明它可能抛出的必明它可能抛出的必检检异常的异常的类类型型.如:如:public void myMethod()throws IOException public void myMethod()throws IOException,OtherException 抛出异常抛出异常(抛出异常(throwing an exception)程序)程序检测检测到一个到一个错误错误后,后,创创建一个适当建一个适当类类型异常的型异常的实实例例并抛出它。并
6、抛出它。这这里有一个例子:里有一个例子:throw new TheException();TheException ex=new TheException();throw ex;抛出异常/*Set a new radius*/public void setRadius(double newRadius)throws IllegalArgumentExceptionthrows IllegalArgumentException if(newRadius=0)radius=newRadius;else throw new IllegalArgumentException(Radius cannot
7、 be negative);捕获异常 try statements;/Statements that may throw exceptionscatch(Exception1 exVar1)handler for exception1;catch(Exception2 exVar2)handler for exception2;.catch(ExceptionN exVar3)handler for exceptionN;page 448java.lang.Throwable 方法public String getMessage()返回返回Throwable对象的详细信息对象的详细信息publ
8、ic String toString()返回返回3个字符串合起来的串,它们分别是:异常个字符串合起来的串,它们分别是:异常类名的全称;类名的全称;“:”一个一个冒号冒号和一个空格;和一个空格;getMessage()方法。方法。public void printStackTrace()在控制台上输出在控制台上输出Throwable对象及其踪迹信息对象及其踪迹信息。例例15.1 声明、抛出和捕获异常声明、抛出和捕获异常 问题:问题:本例演示如何声明、抛出和捕获异本例演示如何声明、抛出和捕获异常,改写常,改写6.10 节中节中setRadius 方法,如果半方法,如果半径是径是负负的,新的的,新的
9、 setRadius 方法抛出一个方法抛出一个异常。异常。TestCircleWithExceptionCircleWithExceptionpage 449output:Radius cannot be negativeNumber of objects created:1System.out.println(ex);is equivalent toSystem.out.println(ex.toString();例15.1(续)说明:在此例中,由于说明:在此例中,由于IllegalArgumentException是一个是一个RuntimeException(unchecked Excep
10、tion),所以在测试程序中若没有编写,所以在测试程序中若没有编写try-catch代码,编译代码,编译时不会报错,只会在运行时抛出异常。时不会报错,只会在运行时抛出异常。(栈跟踪栈跟踪)输出输出(no try-catch block)Exception in thread main:Radius cannot be negativeat CircleWithException.setRadius(CircleWithException.java:30)at CircleWithException.(CircleWithException.java:15)at TestCircleWithEx
11、ception.main(TestCircleWithException.java:5)例15.1(续)说明:若把程序中的说明:若把程序中的try-catch都删除,就会显示以上的运行效果,从运行中可都删除,就会显示以上的运行效果,从运行中可以看出异常栈的跟踪次序。以看出异常栈的跟踪次序。另外,若保留另外,若保留try-catch块,在代码中执行块,在代码中执行ex.printStackTrace()也可以显示异也可以显示异常栈。常栈。捕获或声明异常Java 强强迫程序迫程序员处员处理必理必检检异常异常如果方法声明了一个必如果方法声明了一个必检检异常,必异常,必须须在在try-catch 块块
12、中中调调用它或者在用它或者在调调用它方法中声明抛出异常。例如用它方法中声明抛出异常。例如,假假设设方方法法 p1 调调用方法用方法 p2。方法。方法 p2 将抛出一个异常将抛出一个异常(e.g.,IOException),程序程序员员必必须须按照按照(A)和和(B)编编写程序写程序.(A)(B)Catching Exceptionsmain method .try .invoke method1;statement1;catch(Exception1 ex1)Process ex1;statement2;method1 .try .invoke method2;statement3;catch
13、(Exception2 ex2)Process ex2;statement4;method2 .try .invoke method3;statement5;catch(Exception3 ex3)Process ex3;statement6;An exception is thrown in method3page 449Note 在在catch子句中制定异常的顺序是非常重要子句中制定异常的顺序是非常重要的。的。try catch(Exception ex)catch(RuntimeExcepiton ex)wrongtry catch(RuntimeExcepiton ex)catch(
14、Exception ex)correctpage 552page 449重新抛出异常try statements;catch(TheException ex)perform operations before exits;throw ex;语句语句 throw ex 重新抛出异常,以便其他处理器获得处理异常重新抛出异常,以便其他处理器获得处理异常ex的机的机会。会。finally 子句try statements;catch(TheException e)handling e;finally finalStatements;说明:无论之前的说明:无论之前的try和和catch块中发生了什么,以
15、下块中发生了什么,以下finally代码块中的代码代码块中的代码都都一定一定会执行:会执行:try代码块执行完成,没有发生异常;代码块执行完成,没有发生异常;try代码块发生异常,被某个代码块发生异常,被某个catch代码块处理;代码块处理;try代码块发生异常,没有被任何一个代码块发生异常,没有被任何一个catch代码块处理。代码块处理。Note:Catch blocks are unnecessary if a finally block is present:try finally 如何使用异常异常处理可以将错误处理代码从正常的编程异常处理可以将错误处理代码从正常的编程任务分离出来,这样
16、可以使程序变得容易阅任务分离出来,这样可以使程序变得容易阅读和修改,然而应该注意,由于异常处理需读和修改,然而应该注意,由于异常处理需要初始化新的异常对象并重返调用堆栈,并要初始化新的异常对象并重返调用堆栈,并且通过方法调用链传播异常以便搜寻异常处且通过方法调用链传播异常以便搜寻异常处理器。理器。何时抛出异常一个方法出一个方法出现现异常异常时时,如果想,如果想让该让该方法的方法的调调用者用者处处理异常,理异常,应该创应该创建一个异常建一个异常对对象并象并对对其抛出。如果能在其抛出。如果能在发发生生 异常的方法中异常的方法中处处理异理异常,那么就不需要抛出异常。常,那么就不需要抛出异常。何时使用
17、异常在代在代码码中,中,应该应该什么什么时时候使用候使用try-catch块块?当必?当必须处须处理不可理不可预预料的料的错误时应该错误时应该使用。不要用使用。不要用try-catch块处块处理理简单简单、可、可预预料的情况。例如下述代料的情况。例如下述代码码:try System.out.println(refVar.toString();catch(NullPointerException ex)System.out.println(refVar is null);何时使用异常最好用以下代最好用以下代码码代替代替 if(refVar!=null)System.out.println(ref
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 异常 捕获 枚举 类型
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内