第5章-异常处理.ppt

上传人:s****8 文档编号:82770837 上传时间:2023-03-26 格式:PPT 页数:40 大小:211KB
返回 下载 相关 举报
第5章-异常处理.ppt_第1页
第1页 / 共40页
第5章-异常处理.ppt_第2页
第2页 / 共40页
点击查看更多>>
资源描述

《第5章-异常处理.ppt》由会员分享,可在线阅读,更多相关《第5章-异常处理.ppt(40页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、例外处理什么是例外(Exception)n例外就是在程序的运行过程中所发生的异常事件,它中断指令的正常执行。Java异常nJava程序运行过程中所发生的异常事件可分为两类:n错误(Error):JVM系统内部错误、资源耗尽等严重情况n违例(Exception):其它因编程错误或偶然的外在因素导致的一般性问题,例如:q对负数开平方根q空指针访问q试图读取不存在的文件q网络连接中断例外示例编译下面的程序:编译下面的程序:import java.io.*;class ExceptionDemo1public static void main(String args )FileInputStream

2、fis=new FileInputStream(text);int b;while(b=fis.read()!=-1)System.out.print(b);fis.close();例外示例C:javac ExceptionDemol.javaExceptionDemo1.java:6:Exception java.io.FileNotFoundException must be caught,or it must be declared in the throws clause of this method.FileInputStream fis=new FileInputStream(te

3、xt);ExceptionDemo1.java:8:Exception java.io.IOException must be caught,or it must be declared in the throws clause of this method.while(b=fis.read()!=-1)2 errors例外示例编译和运行下面的程序:编译和运行下面的程序:class ExceptionDemo2public static void main(String args )int a=0;System.out.println(5/a);例外示例C:javac ExceptionDem

4、o2.javaC:java ExceptionDemo2java.lang.ArithmeticException:/by zeroat ExceptionDemo2.main(ExceptionDemo2.java:4)有有些些例例外外(异异常常)在在编编译译的的时时候候能能够够发发现现,有有些些是是在在运运行的时候发现行的时候发现例外处理机制n在Java程序的执行过程中,如果出现了异常事件,就会生成一个例外对象。nJava例外处理机制:抛出(Throw)例外和捕获(catch)例外n例外对象可能是由正在运行的方法生成,也可能由Java虚拟机生成,其中包含一些信息指明异常事件的类型,以及当异

5、常发生时程序的运行状态等。生成的例外对象传递给Java运行时系统(Java Runtime System),这一例外对象的产生和提交过程称为抛弃(throw)例外 例外处理机制nJava运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。寻找的对象从生成异常对象的代码块开始,沿着方法的调用栈逐层回溯,直到找到一个方法能够处理这种类型的异常为止。然后运行时系统把当前异常对象交给这个方法进行处理。这一过程称为捕获(catch)异常。n如果Java运行时系统找不到可以捕获例外的方法,则运行时系统将终止,相应的Java程序也将退出。n一个异常事件对应一个例外对象。AWTExceptionThr

6、owableErrorExceptionRuntimeExceptionIOExceptionLinkageErrorVirtualMachineErrorAWTErrorArithmeticExceptionIndexOutOfBounds.InterruptedExceptionFileNotFoundExceptionEOFException.例外类的层次nError动态链接失败,虚拟机错误等,通常Java程序不应该捕获这类例外,也不会抛弃这种例外。nExceptionq运行时例外(可以不处理)继承于RuntimeException。Java编译器允许程序不对它们做出处理,必要时也可以处

7、理。q非运行时例外(必须处理)除了运行时例外之外的其他由Exception继承来的例外类。Java编译器要求程序必须捕获或者声明抛弃这种例外。n捕获例外捕获例外是通过try-catch-finally语句实现的。try./可能发生例外的代码可能发生例外的代码catch(ExceptionName1 e)./例外处理代码例外处理代码catch(ExceptionName2 e)./例外处理代码例外处理代码.finally.例外处理语句的统一出口例外处理语句的统一出口n try捕获例外的第一步是用try选定捕获例外的范围,由try所限定的代码块中的语句在执行过程中可能会生成例外对象并抛弃。n ca

8、tch 每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的例外事件。catch语句只需要一个形式参数指明它所能够捕获的例外类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的例外对象传递给catch块.在catch块中是对例外对象进行处理的代码,与访问其它对象一样,可以访问一个例外对象的变量或调用它的方法。getMessage()是类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace()用来跟踪异常事件发生时执行堆栈的内容。import java.io.*;public

9、class ExceptionDemo1 public static void main(String args)try FileInputStream fis=new FileInputStream(text);/可能发生异常可能发生异常 int b;while(b=fis.read()!=-1)System.out.println(b);fis.close();catch(FileNotFoundException ex)System.out.println(文件不存在异常文件不存在异常.);System.out.println(ex.getMessage();System.out.pri

10、ntln(ex);ex.printStackTrace(System.out);catch(IOException ex)System.out.println(输入输入/输出异常输出异常.);System.out.println(ex);catch语句的顺序n捕获例外的顺序和不同catch语句的顺序有关,当捕获到一个例外时,剩下的catch语句就不再进行匹配。n“匹配”是指catch语句的参数类型和异常对象的类型完全相同或者为异常对象的父类型。n在安排catch语句的顺序时,首先应该捕获最特殊的例外,然后再逐渐一般化。也就是一般先安排子类,再安排父类。catch(IOException ex)

11、System.out.println(输入输入/输出异常输出异常.);System.out.println(ex);catch(FileNotFoundException ex)System.out.println(文件不存在异常文件不存在异常.);System.out.println(ex.getMessage();System.out.println(ex);ex.printStackTrace(System.out);两个两个catch语句的顺序调整后,报告如下的错误:语句的顺序调整后,报告如下的错误:ExceptionDemo1.java:exception java.io.FileN

12、otFoundException has already been caught at line 24,column 18 nfinally捕获例外的最后一步是通过finally语句为例外处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。n 可选的。try FileInputStream fis=new FileInputStream(text);int b=0;System.out.println(5/b);catch(ArithmeticException e)finally

13、 if(fis!=null)System.out.println(“closing FileInputStream”);else System.out.println(“FileInputStream not open”);n 通过finally可以正常的关闭文件。通过一个完整的例子说明不同情况下的异常捕获import java.io.*;public class ExceptionDemo1 public static void main(String args)FileInputStream fis=null;try System.out.println(第一个命令行参数是:+args0)

14、;fis=new FileInputStream(text);System.out.println(文件的内容是:);int b;while(b=fis.read()!=-1)System.out.print(char)b);System.out.println(n);fis.close();catch(FileNotFoundException ex)System.out.println(发生文件不存在的异常.);System.out.println(ex);catch(IOException ex)System.out.println(输入/输出异常.);System.out.printl

15、n(ex);catch(IndexOutOfBoundsException e)System.out.println(“数组越界异常”);System.out.println(e);finally if(fis!=null)System.out.println(正在关闭文件。正在关闭文件。);try fis.close();catch(IOException ex1)else System.out.println(文件输入流没有打开。文件输入流没有打开。);第一种情况:要打开的文件不存在时,程序运行时会生成FileNotFoundException异常对象,运行时系统把它交给第一个catch语

16、句处理,最后执行finally语句,运行结果如下:第一个命令行参数是:hello 发生文件不存在的异常。java.io.FileNotFoundException:text(系统找不到指定的文件。)文件输入流没有打开。第二种情况,我们创建了文件“text”,但是在运行时,我们不给出任何参数,这时会放生IndexOutOfBoundsException类的异常,运行时系统把它交给第三个catch语句处理,最后执行finally语句,执行结果如下:java.lang.ArrayIndexOutOfBoundsException:0 at ExceptionDemo1.main(ExceptionD

17、emo1.java:6)Exception in thread main 文件输入流没有打开。第三种情况,程序正确执行try代码块后,执行finally语句,运行结果如下:第一个命令行参数是:Hello 文件的内容是:let us begin to use java,let us begin to know java.正在关闭文件。声明抛弃例外n如果在一个方法中生成了一个例外,但是这一方法并不确切地知道该如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃例外,使得例外对象可以从调用栈向后传播,直到有合适的方法捕获它为止。声明抛弃例外(参考J2SDK文档)n声明抛弃例外是在一个方法声明中的

18、throws子句中指明的。例如:public int read()throws IOException.throws子句中同时可以指明多个例外,说明该方法将不对这些例外进行处理,而是声明抛弃它们:public static void main(String args)throws IOException,IndexOutOfBoundsException 人工抛出异常Java异常类对象除在程序执行过程中出现异常时由系统自动生成并抛出,也可根据需要人工创建并抛出q首先要生成异异常常对象,然后通过throw语句实现抛出操作(提交给Java运行环境)。IOException e=new IOExce

19、ption();throw e;q可以抛出的异异常常必须是Throwable或其子类的实例。下面的语句在编译时将会产生语法错误:throw new String(want to throw);例外类的使用n自定义例外类必须是Throwable的直接或间接子类,一般定义为Exception的子类n一个方法所声明抛弃的例外是作为这个方法与外界交互的一部分而存在的。方法的调用者必须了解这些例外,并确定如何正确的处理他们。例外类的使用nFileInputStream 的APIpublic FileInputStream(String name)throws FileNotFoundException例

20、外示例import java.io.*;class ExceptionDemo1public static void main(String args )FileInputStream fis=new FileInputStream(text);例外类的使用n积极处理方式:import java.io.*;class ExceptionDemo1public static void main(String args )try FileInputStream fis=new FileInputStream(text);catch(FileNotFoundException e)例外类的使用n消极

21、处理方式:import java.io.*;class ExceptionDemo1public static void main(String args )throws FileNotFoundException FileInputStream fis=new FileInputStream(text);例外类的使用n如果采用消极处理方式,则由调用该方法的方法进行处理;但是调用该方法的方法也可以采用消极和积极两种处理方式,一直传递到Java运行环境.例外类的使用n运行时例外则表示由运行时系统所检测到的程序设计问题或者API的使用不当问题,它可能在程序的任何地方出现:(1)对于运行时例外,如果

22、不能预测它何时发生,程序可以不做处理,而是让Java虚拟机去处理它。(2)如果程序可以预知运行时例外可能发生的地点和时间,则应该在程序中进行处理,而不应简单的把它交给运行时系统。例外类的使用(3)在自定义例外类时,如果它所对应的异常事件通常总是在运行时产生的,而且不容易预测它将在何时、何处发生,则可以把它定义为运行时例外,否则应定义为非运行时例外。重写方法声明抛弃异常原则重写方法不能抛出比被重写方法范围更大的异常异常类型 public class A public void methodA()throws IOException public class B1 extends TestA pu

23、blic void methodA()throws FileNotFoundException public class B2 extends TestA public void methodA()throws Exception 创建用户自定义异常类用户自定义异常异常类MyException,用于描述数据取值范围错误信息:class MyException extends Exception private int idnumber;public MyException(String message,int id)super(message);this.idnumber=id;public

24、int getId()return idnumber;使用用户自定义异常类public class Test12_6 public void regist(int num)throws MyException if(num 0)throw new MyException(人数为负值,不合理,3);System.out.println(登记人数+num);public void manager()try regist(100);catch(MyException e)System.out.print(登记失败,出错种类+e.getId();System.out.print(本次登记操作结束);public static void main(String args)Test12_6 t=new Test12_6();t.manager();

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁