《【教学课件】第06章异常处理.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第06章异常处理.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第6 6章章 异常处理异常处理1学习内容学习内容l异常的概念l异常处理的基本过程l异常的定义、抛出、捕获和处理l掌握程序设计中使用异常处理的基本原则2程序中的错误处理程序中的错误处理l程序错误的类型语法错误运行错误l运行错误的处理方式终止程序的运行。使用错误检测代码,通过返回值来判断是否出错,然后处理。On error goto label异常处理机制31 异常的概念异常的概念l异常(Exception)是程序运行过程中出现的影响语句正常运行顺序的意外或特殊事件。l异常对象Java中用对象来表示异常,程序中出现异常时,会产生异常对象,其中包含异常的类型和错误出现时程序的状态信息。4异常的分类
2、异常的分类l按处理方式受查异常(Checked Exception)非受查异常(Unchecked Exception)l按产生原因JVM异常(Error)运行时异常(Runtime Exception)应用程序异常(Application Exception)5异常类的层次结构异常类的层次结构6异常处理异常处理l异常处理(Exception Handling)程序中对出现的异常进行的检测和处理。异常处理程序(Exception Handler)l异常处理程序的内容定义异常抛出异常捕获异常处理异常72 定义异常定义异常lJava中异常是以类的形式定义的。l系统定义的异常运行时异常:Runtim
3、eException的子类应用程序异常:Exception的除RuntimeException外的其它子类JVM异常:Error的子类l用户处定义的异常对于用户程序出现的特定的错误,需要用户自定义异常类8自定义异常类的例子自定义异常类的例子class Account /class Account /帐户类帐户类 private String ID;/private String ID;/帐户账号帐户账号 private double balance;/private double balance;/帐户余额帐户余额 public Account(String aID,double b)publ
4、ic Account(String aID,double b)ID=aID;balance=b;ID=aID;balance=b;public void drawing(double m)/public void drawing(double m)/取款方法取款方法 balance=balance-m;/balance=balance-m;/余额减取款金额余额减取款金额 public String toString()public String toString()return ID;return ID;9/自定义异常类自定义异常类class NotEnoughBalanceException
5、 extends Exception class NotEnoughBalanceException extends Exception Account account;/Account account;/存放发生异常的帐户对象存放发生异常的帐户对象 NotEnoughBalanceException(Account a)/NotEnoughBalanceException(Account a)/构造方法构造方法 super(super(余额不足!余额不足!););account=a;account=a;public String toString()public String toStrin
6、g()return return 帐户帐户+account+account+的余额不足!的余额不足!;10自定义异常类时注意的问题自定义异常类时注意的问题l选择恰当的父类。l为异常定义合适的域和方法,必要时重载或覆盖父类的方法。l自定义的异常类应该也组织为层次结构。113 抛出异常抛出异常l程序运行过程中,如果产生了一个可以识别的错误,就会创建一个与该错误相对应的异常类的对象实例并交给运行系统,这个过程称为抛出异常。12系统自动抛出异常系统自动抛出异常l所有系统定义的运行时异常(RuntimeException及其子类)可以由系统自动抛出。class ThrowExceptionTest cl
7、ass ThrowExceptionTest public static void main(String args)public static void main(String args)(异常发生前异常发生前.);.);System.out.println(5/0);/System.out.println(5/0);/此处抛出异常此处抛出异常 (异常发生后异常发生后.);.);13使用使用throws关键字抛出异常关键字抛出异常lJava强制要求程序员处理程序中出现的应用程序异常,即受查异常。l如果希望在可能产生应用程序异常的方法中不对产生的异常进行处理,而是将产生的异常抛给调用该方法的外
8、层方法来处理,则可以在定义方法时使用throws关键字。lthrows关键字的用法修饰符 返回类型 方法名(参数表)throws 异常类名列表/语句 14throws子句使用例子子句使用例子import .*;class URLAnalysis public static void main(String args)throws MalformedURLException if(args.length=1)URL url=new URL(args0);/可能抛出异常 System.out.println(URL:+url.toExternalForm()+n+文件:+url.getFile()
9、+n+主机:+url.getHost()+n+端口:+url.getPort()+n+协议:+url.getProtocol()+n+标记:+url.getRef();else (缺少命令行参数:);15使用使用throw语句抛出异常语句抛出异常lthrow语句用于在程序员在程序中主动抛出一个异常对象。其语法形式如下:throw 表达式;l表达式必须是可抛出类(Throwable及其子类)lthrow语句使用的必须满足下面条件之一:表达式是非受查异常,Error或RuntineException;表达式是受查异常,Exception的其它子类,则:lthrow语句或者包含在try-catch结
10、构中;lthrow语句或者处于有throws子句中声明了表达式类型的异常的方法中。16throw语句的例子语句的例子public void drawing(double m)throws public void drawing(double m)throws NotEnoughBalanceExceptionNotEnoughBalanceException if(balancem)if(balancem)/检测余额是否不足检测余额是否不足 /余额不足,抛出相应异常余额不足,抛出相应异常 throw new NotEnoughBalanceException(this);throw new N
11、otEnoughBalanceException(this);else else /余额足够,减去取款金额余额足够,减去取款金额 balance=balance-m;balance=balance-m;174 捕获和处理异常捕获和处理异常lJava 的异常捕获和处理由try-catch-finally语句完成。其语法形式如下:try try /可能发生异常的语句可能发生异常的语句 catch(catch(异常类异常类 参数名)参数名)/异常处理语句异常处理语句 /可以有多个可以有多个catchcatch子句子句finallyfinally /语句语句18try-catch-finally 结构
12、的执行流程结构的执行流程程序执行try有异常?finallytry的后继语句catch(e1)catch(e2)catch(eN)Java Runtime查找找不到异常对象无有19异常捕获的原则异常捕获的原则lcatch子句通过被抛出异常的类型是否与其参数类型匹配来捕获异常。l有多个catch子句时,按照catch子句的排列顺序依次检查是否可以捕获,并由第一个匹配的catch子句捕获并处理。l一个异常对象被捕获和处理后,就消失了。20使用使用try-catch-finally结构的例子结构的例子class DivTestclass DivTest public static void main
13、(String args)public static void main(String args)int r,n=10,d=0;int r,n=10,d=0;try try r=n/d;r=n/d;/如果如果d=0,d=0,则抛出异常则抛出异常 System.out.println(r=+r);System.out.println(r=+r);catch(ArithmeticException e)catch(ArithmeticException e)/捕获异常捕获异常 (异常类型:异常类型:+e.getClass();+e.getClass();(异常信息:异常信息:+e.getMessa
14、ge();+e.getMessage();finally finally (除法运算完毕!除法运算完毕!););System.out.println(try System.out.println(try语句的后续语句!语句的后续语句!););21异常处理的嵌套异常处理的嵌套22异常再抛出异常再抛出l为了使异常对象被处理之后仍然存在,可以将处理后异常重新抛出。使用语句如下:throw 异常对象l异常对象的再抛出一般是在catch结构中。23异常处理嵌套和异常再抛出的例子异常处理嵌套和异常再抛出的例子class exTestclass exTest public static void main(
15、String args)public static void main(String args)try try try try throw new Exception(Exception Example.);throw new Exception(Exception Example.);catch(Exception e)catch(Exception e)(内层捕获!内层捕获!+e.getMessage();+e.getMessage();throw e;throw e;catch(Exception e)catch(Exception e)(外层捕获!外层捕获!+e.getMessage();+e.getMessage();24