第3章 Java异常处理_第1页
第3章 Java异常处理_第2页
第3章 Java异常处理_第3页
第3章 Java异常处理_第4页
第3章 Java异常处理_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

Java异常处理Java实用编程技术所谓异常是指程序在运行过程中出现的不正常情况或错误。异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时是可以避免的。有些异常需要处理,有些则不需要处理在不支持异常处理的计算机语言中,错误必须被手工的检查和处理——典型的是通过错误代码的运用Java异常是一个描述在代码段中发生的异常(也就是出错)情况的对象。当异常情况发生,一个代表该异常的对象被创建并且在导致该错误的方法中被引发(throw)。异常概念Java实用编程技术Java异常处理通过5个关键字控制:try、catch、throw、throws和finally程序声明了你想要的异常监控包含在一个try块中。如果在try块中发生异常,它被抛出。你的代码可以捕捉这个异常(用catch)并且用某种合理的方法处理该异常任何在方法返回前绝对被执行的代码被放置在finally块中手动引发一个异常,用关键字throw。任何被引发方法的异常都必须通过throws子句定义异常概念Java实用编程技术try{//需要监控的语句块}catch(ExceptionType1e1){//处理ExceptionType1类型的异常}catch(ExceptionType2e2){//处理ExceptionType1类型的异常}finally//可选{//最后处理的语句块}异常概念Java实用编程技术例子classTest{publicstaticvoidmain(Stringargs[]){inta=0;intb=5/a;}}异常概念Java实用编程技术通常异常分为三类:编译异常、运行异常、逻辑异常编译异常是由于所编写的程序存在语法问题,未能通过由源代码到字节码的编译而产生的,它由语言的编译系统负责检查和报告。此类错误在编译的时候会被检查出来,并不会产生运行代码,只有更正程序中的语法问题后才可以运行程序。运行异常是指程序在执行过程中发生的错误,它会中断程序的正常执行。例如,计算时除数为零、数组下标越界、文件没找到等。异常分类Java实用编程技术逻辑运行异常是指程序不能实现编程人员的设计意图和设计功能而产生的错误,即程序运行后没得到预期的结果,和需求有不一致的地方。此类错误从语法上来说是有效的,只是程序在逻辑上存在缺陷。异常分类Java实用编程技术所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层Throwable下面的是两个把异常分成两个不同分支的子类。一个分支是Exception。该类用于用户程序可能捕捉的异常情况另一类分支由Error作为顶层,Error定义了在通常环境下不希望被程序捕获的异常。Error类型的异常用于Java运行时系统来显示与运行时系统本身有关的错误Throwable类Java实用编程技术所有异常类型都是内置类Throwable的子类。因此,Throwable在异常类层次结构的顶层Throwable下面的是两个把异常分成两个不同分支的子类。一个分支是Exception。该类用于用户程序可能捕捉的异常情况另一类分支由Error作为顶层,Error定义了在通常环境下不希望被程序捕获的异常。Error类型的异常用于Java运行时系统来显示与运行时系统本身有关的错误关于Error类型的异常处理,因为它们通常是灾难性的致命错误,不是你的程序可以控制的Throwable类Java实用编程技术Throwable类Java实用编程技术为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句try—catch异常处理代码块的基本形式:try{//监视可能发生异常的代码块;}catch(异常类型异常对象名)//捕获并处理异常{//异常处理代码块;}处理异常Java实用编程技术例子classTest{publicstaticvoidmain(Stringargs[]){inta,b;try{a=0;b=5/a;System.out.println("Thiswillnotbeprinted.");}处理异常Java实用编程技术例子catch(ArithmeticExceptione){System.out.println("Divisionbyzero.");}System.out.println("Aftercatchstatement.");}}处理异常Java实用编程技术为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句try—catch异常处理代码块的基本形式:try{//监视可能发生异常的代码块;}catch(异常类型异常对象名)//捕获并处理异常{//异常处理代码块;}处理异常Java实用编程技术为防止和处理一个运行时错误,只需要把你所要监控的代码放进一个try块就可以了。紧跟着try块的,包括一个说明你希望捕获的错误类型的catch子句try—catch异常处理代码块的基本形式:try{//监视可能发生异常的代码块;}catch(异常类型异常对象名)//捕获并处理异常{//异常处理代码块;}处理异常Java实用编程技术某些情况,由单个代码段可能引起多个异常。处理这种情况,你可以定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句执行。当一个catch语句执行以后,其他的子句被旁路,执行从try/catch块以后的代码开始继续处理异常Java实用编程技术多个catch异常处理代码块的基本形式:try{//可能发生异常的代码块;}catch(异常类型1异常对象名1){//异常处理代码块1;}…catch(异常类型n异常对象名n){//异常处理代码块n;}处理异常Java实用编程技术异常可以导致方法过早返回,后续处理语句可能就不被执行,这在有些场合时危险的。例如,如果一个方法打开一个文件项并关闭,然后退出,你不希望关闭文件的代码被异常处理机制旁路。finally关键字为处理这种意外而设计finally创建一个代码块。该代码块在一个try/catch块完成之后另一个try/catch出现之前执行。finally块无论有没有异常引发都会执行。如果异常被引发,finally甚至是在没有与该异常相匹配catch子句情况下也将执行处理异常Java实用编程技术如果在一个方法中生成了一个异常,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛出异常,使得异常对象可以从调用栈向后传播,直到有合适的方法捕获它为止声明抛出异常是在一个方法声明中的throws子句中指明的包含throws子句的方法的基本形式:[修饰符]返回类型方法名(参数去,参数2,……)

throws异常列表{……}声明及抛出异常Java实用编程技术下面是一个不正确的例子。该例试图引发一个它不能捕获的异常。因为程序没有指定一个throws子句来声明这一事实,程序将不会编译声明及抛出异常Java实用编程技术classThrowsDemoTest{staticvoidtest(){System.out.println("Insidetest.");thrownewIllegalAccessException("demo");}publicstaticvoidmain(Stringargs[]){test();}}声明及抛出异常Java实用编程技术改写为:classThrowsDemoTest{staticvoidtest()throwsIllegalAccessException{System.out.println("Insidetest.");thrownewIllegalAccessException("demo");}声明及抛出异常Java实用编程技术publicstaticvoidmain(Stringargs[]){try{test();}catch(IllegalAccessExceptione){System.out.println("Caught"+e);}}}声明及抛出异常Java实用编程技术抛出异常首先要生成异常对象,异常或者由虚拟机生成,或者由某些类的实例生成,也可以在程序中生成。手动抛出异常对象是通过throw语句实现的,但可以抛出的异常必须是Throwable或其子类的实例throw语句的通常形式如下:throwThrowableInstance这里,ThrowableInstance一定是Throwable类类型或Throwable子类类型的一个对象使用throw抛出异常Java实用编程技术尽管Java的内置异常处理大多数常见错误,你也许希望建立你自己的异常类型来处理你所应用的特殊情况只要定义Exception的一个子类就可以Exception类自己没有定义任何方法。当然,它继承了Throwable提供的一些方法。因此,所有异常,包括你创建的,都可以获得Throwable定义的方法自定义异常Java实用编程技术例子:classMyExceptionextendsException{privateintdetail;MyException(inta){detail=a;}publicStringtoString(){return"MyException["+detail+"]";}}自定义异常Java实用编程技术classExceptionDemo{staticvoidcompute(inta)throwsMyException{System.out.println("Calledcompute("+a+")");if(a>10)thrownewMyException(a);System.out.println("Normalexit");}自定义异常Java实用编程技术publicstaticvoidmain(Stringargs[]){try{

温馨提示

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

评论

0/150

提交评论