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

下载本文档

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

文档简介

1、第第1313章章 异常处理异常处理立体化教材计算机系列 Java程序设计程序设计 2 立体化教材计算机系列 Java程序设计程序设计 3本章知识重点3132异异 常常异常处理机制异常处理机制异常类异常类异常的类别异常的类别 捕获异常捕获异常抛出异常抛出异常创建自定义异常创建自定义异常异常处理的作用异常处理的作用立体化教材计算机系列 Java程序设计程序设计 4 异常类 我们总是试图避免在软件程序中错误的发生,但是百分之百没有错误的程序是不存在的。无论怎样,如果我们能适当的处理错误,将会极大的改善程序的可读性、可靠性以及可维护性。Java编程语言使用异常来处理错误。这章主要讲述在什么时候和怎样使

2、用异常来处理错误立体化教材计算机系列 Java程序设计程序设计 5异常处理程序的基本形式异常处理程序的基本形式method() throws ExceptionType2,ExceptionType3,try /程序块程序块 catch (ExceptionType1 e) / 对对ExceptionType1的处理的处理 catch (ExceptionType2 e) / 对对ExceptionType2的处理,处理了一部分,的处理,处理了一部分,throw(e); /再抛出这个再抛出这个“异常异常”给上层的调用者给上层的调用者finally 立体化教材计算机系列 Java程序设计程序设计

3、 6异常对象异常对象每个异常都是一个对象,它是Throwable类或其它子类的实例.当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Throwable类有两个标准子类:错误类:java.lang.Error错误Error类一般是指虚拟机相关的问题,异常类:java.lang.Exception异常Exception类则是指一些可以被捕获且可能恢复的异常情况,如数组下标越界 立体化教材计算机系列 Java程序设计程序设计 7Java异常类的继承关系 Exception异常又分为异常又分为RuntimeException和和non-R

4、untimeException两大类异常。两大类异常。立体化教材计算机系列 Java程序设计程序设计 8异常实例设定一个名称为isLegal的变量来检查数据是否合法,如果数据大于0时,返回合法值,否则视为不合法,抛出“异常”。 int isLegal(int dt) throws LowZeroException /这种定义本文中均称为方法与“异常”通过throws建立了关联if(dt=0) return data; else throw new LowZeroException(); /*自已写的异常类,继承自Exception*/ class LowZeroException extend

5、s Exception public LowZeroException() super(); 立体化教材计算机系列 Java程序设计程序设计 9异常的类别在实际的程序开发中,异常无处不在,并且种类繁多。区分什么情况下会出现什么样的异常是十分必要的。两个不同的角度来区分异常的种类: 异常发生的原因以 编译时对异常的检查。立体化教材计算机系列 Java程序设计程序设计 10异常的类别种类313233Java虚拟机所检测到的非正常的执行状态,一般来说这些状态在编码的时候比较难以检测,直到运行的时候才会暴露出来。是Java语言中具有throw关键字的语句被执行的时候异步异常立体化教材计算机系列 Jav

6、a程序设计程序设计 11无论是Java的API中定义的诸多异常类还是我们自己定义的异常类(自定义异常在下面本章后面有详细的说明),根据编译器对异常的检查情况,又可以分为可检测异常和不可检测异常两种 异常的类别立体化教材计算机系列 Java程序设计程序设计 12可检测异常常见的可检测异常有:常见的可检测异常有:ClassNotFoundException;/没有找到指定类的定义IOException;/指示产生某种输入/输出异常。FileNotFoundException;/文件没有找到异常。ArithmeticException立体化教材计算机系列 Java程序设计程序设计 13 异常处理机制

7、捕获异常抛出异常创建自定义异常异常处理的作用立体化教材计算机系列 Java程序设计程序设计 14捕获异常Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally和所有的捕获异常程序一样,第一步是用try关键字选定监控异常的代码范围,然后在这段程序之后使用catch关键字捕获异常,每个try代码块可以使用多个catch代码块来对应,而catch语句需要指名它所捕获的异常的类型名。立体化教材计算机系列 Java程序设计程序设计 15捕获异常实例isLegal方法用来判断输入int类型的参数iData是否合法,如果合法,便将合法的返回参数赋值给data

8、,如果不合法,则抛出某种异常。 异常抛出后,我们在捕获模块(catch)的大括号中打印出错误int MyMethod(int iData) int data = 0; try int data = isLegal(iData); catch(xException e) System.out.println(发生数据错误!); return data;立体化教材计算机系列 Java程序设计程序设计 16抛出异常 若在try块中抛出的异常没有能够捕获它的catch块,或捕获这个异常但不想立即处理,则Java将退出这个方法,并将其返回到上一级处理,如此不断地递归向上直到最外一级。同时,在方法的声明中

9、要指定方法中可能产生的异常,使这个方法的调用者准备好处理这种异常的代码,这种类型的异常在此方法的调用者中得到了处理。调用者可能自己处理这种异常,也可能将这个异常放给它的调用者。异常就这样逐级上溯,直到找到处理它的代码为止。如果没有任何代码来捕获并处理这个异常,Java将结束这个程序的执行立体化教材计算机系列 Java程序设计程序设计 17抛出异常的情况Java可能会抛出异常的情况包括:调用的方法抛出了异常、检测到了错误并使用throw语句抛出异常、程序代码有错误,从而导致异常,比如数组越界错误、Java运行时刻系统产生内部错误。当前两种异常发生时,应该告诉使用这个方法的人,此方法强迫Java抛

10、出异常。因为任何抛出异常的方法都是导致程序死亡的陷阱,如果没有任何代码来处理方法抛出的异常,就会导致程序结束立体化教材计算机系列 Java程序设计程序设计 18抛出异常步骤确定异常类确定异常类创建异常类的实例创建异常类的实例抛出异常抛出异常立体化教材计算机系列 Java程序设计程序设计 19抛出异常实例public class ExceptionUse /可能会抛出异常类的方法public static void throwException() throws Exception System.out.println(下面产生一个Io异常并将其抛出!); /抛出异常 throw new Run

11、timeException(MyException); public static void main(String args) try throwException(); /捕获异 catch(Exception re) System.out.println(捕获Io异常:+re); 立体化教材计算机系列 Java程序设计程序设计 20程序的输出结果代码在main()方法中调用了throwException()方法,此方法的声明中可以看到,它可能会抛出IoException异常。再看此方法的定义,它使用new运算符实例化了一个RuntimeException 类,并使用throw语句将其抛出

12、。调用这个方法后,异常被抛出,catch语句进行捕获,并打印出异常信息立体化教材计算机系列 Java程序设计程序设计 21创建自定义异常现实世界是非常复杂的,常常会有一些特殊的约束要求。例如我们制作一个统计河堤水位的软件,水位过高的时候,对程序本身只是一个较大的数字而已,并不会引发Java类库中的异常;但对于现实中的情况,水位过高就是一个致命的异常。这种情况下,Java类库中的异常处理类已经不能满足要求,我们需要抛出一个新的异常来提示过高的水位:一个自己定义的异常立体化教材计算机系列 Java程序设计程序设计 22自定义语法这里的extends Exception就是我们定义的这个异常类是从j

13、ava类库中的Exception这个类派生的,也就是说,我们自定义的异常类可以拥有Exception这个类的全部的内容,另外,还可以再写一些我们需要的内容在里面创建自己的异常类非常的简单,可以用下面的声明语言来定义:class 自定义异常名 xtends Exception立体化教材计算机系列 Java程序设计程序设计 23自定义异常实例一假如我们需要抛出一个提示水位过高的异常,我们可以写一个像下面这样的异常类class MyException extends Exceptionprivate int i;MyException(int a) i = a; public String toSt

14、ring() return “水位过高”; 立体化教材计算机系列 Java程序设计程序设计 24自定义异常实例二综合前面几节的知识,我们写一个抛出这个异常的程序来测试一下这个自定义的异常类,同样的还在这个类中,建立一个抛出这个异常的方法:Static void method(int a) throws MyException/声明这个方法会抛出MyException异常If(a 10) throw new MyException(a);/主动抛出MyException(a)立体化教材计算机系列 Java程序设计程序设计 25自定义异常实例三当我们调用类CatchDemo中的静态方法method

15、(int a)的时候,如果我们将大于10 的参数赋值给method方法的时候,就会抛出我们上面写的水位过高的异常。除了需要一个抛出异常的方法,运行这个方法还需要在main方法中调用这个方法:Public static void main(string args) try method(11);Catch(MyExceptin e)System.out.println(e.toSring();立体化教材计算机系列 Java程序设计程序设计 26实例四运行上面的程序,在控制台的输出界面中,我们可以观察到下图的结果:综上所述,当提供一些特定的功能用Java类时,需要保证类之间有良好的关系,而且类之间

16、的接口易于理解和实现。对于异常类一样,可以定义新的异常类。创建自己的异常类更便于维护和管理立体化教材计算机系列 Java程序设计程序设计 27 异常处理的作用在传统的非面向对象的编程语言中,并没有一个规范和稳定的错误处理机制,编程者必须考虑到在程序中可能出现的各种问题,并且自己定义一种可以表示异常信息的方式最常见的方式就是使用方法返回值进行处理。编写返回一个执行结果或者状态代码的方法,调用者根据返回的执行结果状态代码判断运行结果的正常或者失败立体化教材计算机系列 Java程序设计程序设计 28异常处理的缺点假如状态代码返回一个错误的状态代码,则进行相应的处理,显示一个错误页面或错误信息。通过返

17、回值进行处理的方法是有效的,但有许多不足之处对于编程人员来说,增加了他们的负担。对于编写的程序来说,则有以下几个缺点:出错处理不规范,降低了程序的可读性,程序复杂,可靠性差,返回信息有限, 返回代码标准化困难立体化教材计算机系列 Java程序设计程序设计 29异常处理的优点异常处理的方式和传统的方式有所不同,当一个方法引发一个异常之后,可以将异常抛出,由该方法的直接或间接调用者处理这个异常。这就是常说的catch-throw(捕获-抛出)方式采用这种处理方式具有以下几个优点:错误的处理变得规范化,把错误代码与常规代码分开,可以在catch中传播错误信息,可以对错误类型分组,方便定位错误和维护立

18、体化教材计算机系列 Java程序设计程序设计 30经典练习题填空题throw语句的作用是 _ 。Exception又分为 _和 _ 异常。Java中,异常分为 _和_两类。Throwable类有两个重要子类:_和_ 。立体化教材计算机系列 Java程序设计程序设计 31下面程序段的执行结果是_ 。public class Test public static void main(String args) try return;finallySystem.out.println(Finally);经典练习题立体化教材计算机系列 Java程序设计程序设计 32选择题异常产生的原因很多,常见的有( )。A.程序设计本身的错误B.程序运

温馨提示

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

评论

0/150

提交评论