第四讲 Java的异常处理.ppt

上传人:仙人指路1688 文档编号:2201641 上传时间:2023-01-30 格式:PPT 页数:39 大小:162KB
返回 下载 相关 举报
第四讲 Java的异常处理.ppt_第1页
第1页 / 共39页
第四讲 Java的异常处理.ppt_第2页
第2页 / 共39页
第四讲 Java的异常处理.ppt_第3页
第3页 / 共39页
第四讲 Java的异常处理.ppt_第4页
第4页 / 共39页
第四讲 Java的异常处理.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

《第四讲 Java的异常处理.ppt》由会员分享,可在线阅读,更多相关《第四讲 Java的异常处理.ppt(39页珍藏版)》请在三一办公上搜索。

1、Java的异常处理,伍淳华北京邮电大学计算机学院,Java,Java的异常处理,什么是异常,异常就是在程序的执行过程中所发生的异常事件,它中断指令的正常执行,Java,Java的异常处理,异常处理,可能出现的问题用户输入错误设备错误物理限制代码错误,Java,Java的异常处理,异常(Throwable)分类,Throwable:所有异常的根类Error:Throwable的直接子类 动态链接失败,虚拟机错误等。通常Java程序不应该捕获这类异常,也不会抛弃这种异常。,Java,Java的异常处理,异常(Throwable)分类,Exception 运行时异常继承于RuntimeExcepti

2、on.Java一般是由于程序错误产生-错误的类型转换-数组访问越界-访问空指针 编译器允许不对它们做出处理(unchecked)“如果出现RuntimeException异常,就一定是你的问题”,Java,Java的异常处理,异常(Throwable)分类,Exception 非运行时异常 除了运行时异常之外的其它的继承自Exception的异常类。程序曾经能够正常运行,但由于某种情况的变化,导致异常出现,程序不能正常运行。-文件不存在-用户输入错误 编译器要求程序必须对这类异常进行处理(checked),Java,Java的异常处理,Java,Java的异常处理,异常示例,import ja

3、va.io.*;class ExceptionDemo1 public static void main(String args)FileInputStream fis=new FileInputStream(“text”);int b;while(b=fis.read()!=-1)System.out.print(b);fis.close();,Java,Java的异常处理,异常示例,c:javac ExceptionDemo1.javaExceptionDemo1.java:6:Exception java.io.FileNotFoundException must be caught,o

4、r it must be declared in the throws clause of this methodFileInputStream fis=new FileInputStream(“text”);ExceptionDemo1.java:8:ExceptionJava.io.IOException must be caught,or it must be declared in the throws clause of this methodwhile(b=fis.read()!=-1),Java,Java的异常处理,异常处理,class ExceptionDemo2 public

5、 static void main(String args)int a=0;System.out.println(5/a);,Java,Java的异常处理,异常处理,c:/javac ExceptionDemo2.javac:/java ExceptionDemo2 java.lang.ArithemeticException:/by zero atExceptionDemo2.main(ExceptionDemo2.java:4),Java,Java的异常处理,异常处理机制,在java的执行过程中,如果出现了异常事件,就会生成一个异常对象。JAVA有两种对异常的处理方式:抛弃异常:方法内部产

6、生异常的地方,生成一个异常对象,并将该异常对象提交给方法的调用者,这一异常的生成和提交过称成为抛弃(throw)异常 捕获异常:当Java运行时得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,系统把当前异常对象交给这个方法处理,这一过程成为捕获(catch)异常,Java,Java的异常处理,抛弃异常,声明抛弃异常 如果在一个方法中生成了一个异常,但是这一方法并不确切的知道如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃异常。“一个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器可能发生什么异常”,Java,Java的异常处理,抛弃异常,声明抛

7、弃异常声明抛弃异常是在一个方法声明中的throw子句中指明的。例如 public FileInputStream(String name)throws IOExceptionthrows子句中可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们。public static void main(String args)throws IOException,IndexOutOfBoundsException,Java,Java的异常处理,抛弃异常,如何抛弃异常抛弃异常首先要生成异常对象,异常对象可由某些类的实例生成,也可以由JAVA虚拟机生成。抛弃异常对象时通过throw语句实

8、现。IOException e=new IOException();throw e;可以抛弃的异常必须是Throwable或者其子类的实例。下面的语句在编译时将会产生语法错误 throw new String(“want to throw”);,Java,Java的异常处理,抛弃异常,对于已存在的异常类,抛出该异常非常容易找到一个合适的异常类;创建这个类的一个对象;将该对象抛出;,Java,Java的异常处理,抛弃异常,对于已存在的异常类,抛出该异常非常容易 String readData(Scanner in)throws EOFExceptionwhile()if(!in.hasNext(

9、)if(nlen)throw new EOFException();,Java,Java的异常处理,自定义异常类,自定义异常类即是定义一个派生于Exception的直接或间接子类;如一个派生于IOException的类。一般情况下,定义的异常类应该包括两个构造器,一个是默认的构造器,一个是带有详细描述信息的构造器(超类Throwable的toString方法会打印出这些详细信息,有利调试代码),Java,Java的异常处理,自定义类,class FileFormatException extends IOExceptionpublic FileFormatException()public F

10、ileFormatException(String gripe)super(gripe);,Java,Java的异常处理,自定义类,String readData(BufferedReader in)throws FileFormatExceptionwhile()if(ch=read()=-1)if(nlen)throw new FileFormatException(“File format error!”);,Java,Java的异常处理,捕获异常 捕获异常是通过try-catch-finally语句实现的try catch(ExceptionName1 e)catch(Exceptio

11、nName2 e)finally,Java,Java的异常处理,try 捕获异常的第一步使用try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象,Java,Java的异常处理,catch-每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。-catch语句只需要一个形式参数指明它所能捕获的异常类型,这个类必须是Throwable的子类,运行时系统通过参数值把被抛弃的异常对象传寄给catch块-在catch块中是对异常对象进行处理的代码,与访问其他对象一样,可以访问一个异常对象的变量或调用它的方法。getMessage()是

12、类Throwable所提供的方法,用来得到有关异常事件的信息,类Throwable还提供了方法printStackTrace()用来跟踪异常事件发生时执行堆栈的内容,Java,Java的异常处理,trycatch(FileNotFoundException e)System.out.println(e);System.out.println(“message:”+e.getMessage();e.printStackTrace(System.out);catch(IOException e)System.out.println(e);,Java,Java的异常处理,catch语句的顺序,捕获异

13、常的顺序和不同catch语句的顺序有关,当捕获到一个异常时。剩下的catch语句就不再进行匹配。因此在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后在逐渐一般化,也就是一般先安排子类,再安排父类。,Java,Java的异常处理,finally 捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。,Java,Java的异常处理,try/1code that might throw exceptions/2 catch(IOE

14、xception e)/3show error dialog finally/4/5,Java,Java的异常处理,程序没有产生异常,1-2-4-5程序产生了一个可被catch捕获的异常:1-3-4-5程序产生了一个不能被catch捕获的异常:1-4,Java,Java的异常处理,异常处理,积极处理消极处理,Java,Java的异常处理,异常处理,例:FileInputStream(string name)throws FileNotFoundExceptionimport java.io.*;class ExceptionDemo1 public static void main(strin

15、g args)FileInputStream fis=new FileInputStream(“text”);,Java,Java的异常处理,异常处理,积极处理方式import java.io.*;class ExceptionDemo1 public static void main(string args)tryFileInputStream fis=new FileInputStream(“text”);catch(FileNotFoundExcption e),Java,Java的异常处理,异常处理,消极处理方式import java.io.*;class ExceptionDemo1

16、 public static void main(string args)throws FileNotFoundExcption FileInputStream fis=new FileInputStream(“text”);,Java,Java的异常处理,异常处理,处理原则捕获那些知道如何处理的异常;将不知道如何处理的异常抛出;,Java,Java的异常处理,使用异常机制的建议,(1)异常不能代替简单的测试:只在异常情况下使用异常机制 例:上百万地对一个空栈进行退栈操作if(!s.empty()s.pop();try()s.pop();catch(EmptyStackException e),Java,Java的异常处理,使用异常机制的建议,_TestThrow/Catch_154 milliseconds 10739milliseconds_,Java,Java的异常处理,使用异常机制的建议,(2)不要过分细化异常,尽量将有可能产生异常的语句放在一个try语句块中;(3)抛出的异常类型尽可能明确,不要总是抛出IOException;(4)早抛出,晚捕获,尽量让高层次的方法通告用户发生了错误;,Java,Java的异常处理和输入输出流,本讲小结,异常分类捕获异常声明抛弃异常抛弃异常,Java,Java语言概述,习题,email:pwd:buptjava,Thank You!,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号