第四讲 Java的异常处理.ppt_第1页
第四讲 Java的异常处理.ppt_第2页
第四讲 Java的异常处理.ppt_第3页
第四讲 Java的异常处理.ppt_第4页
第四讲 Java的异常处理.ppt_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

java的异常处理,伍淳华 北京邮电大学计算机学院,java,java的异常处理,什么是异常,异常就是在程序的执行过程中所发生的异常事件,它中断指令的正常执行,java,java的异常处理,异常处理,可能出现的问题 用户输入错误 设备错误 物理限制 代码错误,java,java的异常处理,异常(throwable)分类,throwable:所有异常的根类 error:throwable的直接子类 动态链接失败,虚拟机错误等。通常java程序不应该捕获这类异常,也不会抛弃这种异常。,java,java的异常处理,异常(throwable)分类,exception 运行时异常 继承于runtimeexception.java 一般是由于程序错误产生 -错误的类型转换 -数组访问越界 -访问空指针 编译器允许不对它们做出处理(unchecked) “如果出现runtimeexception异常,就一定是你的问题”,java,java的异常处理,异常(throwable)分类,exception 非运行时异常 除了运行时异常之外的其它的继承自exception的异常类。 程序曾经能够正常运行,但由于某种情况的变化,导致异常出现,程序不能正常运行。 -文件不存在 -用户输入错误 编译器要求程序必须对这类异常进行处理(checked),java,java的异常处理,java,java的异常处理,异常示例,import java.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.java exceptiondemo1.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(“text”); 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),java,java的异常处理,异常处理,class exceptiondemo2 public static void main(string args) int a=0; system.out.println(5/a); ,java,java的异常处理,异常处理,c:/javac exceptiondemo2.java c:/java exceptiondemo2 java.lang.arithemeticexception:/by zero at exceptiondemo2.main(exceptiondemo2.java:4),java,java的异常处理,异常处理机制,在java的执行过程中,如果出现了异常事件,就会生成一个异常对象。java有两种对异常的处理方式: 抛弃异常:方法内部产生异常的地方,生成一个异常对象,并将该异常对象提交给方法的调用者,这一异常的生成和提交过称成为抛弃(throw)异常 捕获异常:当java运行时得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,系统把当前异常对象交给这个方法处理,这一过程成为捕获(catch)异常,java,java的异常处理,抛弃异常,声明抛弃异常 如果在一个方法中生成了一个异常,但是这一方法并不确切的知道如何对这一异常事件进行处理,这时,一个方法就应该声明抛弃异常。 “一个方法不仅需要告诉编译器将要返回什么值,还要告诉编译器可能发生什么异常”,java,java的异常处理,抛弃异常,声明抛弃异常 声明抛弃异常是在一个方法声明中的throw子句中指明的。例如 public fileinputstream(string name )throws ioexception throws子句中可以同时指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们。 public static void main(string args)throws ioexception,indexoutofboundsexception,java,java的异常处理,抛弃异常,如何抛弃异常 抛弃异常首先要生成异常对象 ,异常对象可由某些类的实例生成,也可以由java虚拟机生成。抛弃异常对象时通过throw语句实现。 ioexception e=new ioexception( ); throw e; 可以抛弃的异常必须是throwable或者其子类的实例。 下面的语句在编译时将会产生语法错误 throw new string(“want to throw”);,java,java的异常处理,抛弃异常,对于已存在的异常类,抛出该异常非常容易 找到一个合适的异常类; 创建这个类的一个对象; 将该对象抛出;,java,java的异常处理,抛弃异常,对于已存在的异常类,抛出该异常非常容易 string readdata(scanner in)throws eofexception while() if(!in.hasnext( ) if(nlen) throw new eofexception( ); ,java,java的异常处理,自定义异常类,自定义异常类即是定义一个派生于exception的直接或间接子类;如一个派生于ioexception的类。 一般情况下,定义的异常类应该包括两个构造器,一个是默认的构造器,一个是带有详细描述信息的构造器(超类throwable的tostring方法会打印出这些详细信息,有利调试代码),java,java的异常处理,自定义类,class fileformatexception extends ioexception public fileformatexception() public fileformatexception(string gripe) super(gripe); ,java,java的异常处理,自定义类,string readdata(bufferedreader in)throws fileformatexception while() if(ch=read()=-1) if(nlen) throw new fileformatexception(“file format error!”); ,java,java的异常处理,捕获异常 捕获异常是通过try-catch-finally语句实现的 try catch(exceptionname1 e) catch(exceptionname2 e) finally ,java,java的异常处理,try 捕获异常的第一步使用try选定捕获异常的范围,由try所限定的代码块中的语句在执行过程中可能会生成异常对象,java,java的异常处理,catch -每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。 -catch语句只需要一个形式参数指明它所能捕获的异常类型,这个类必须是throwable的子类,运行时系统通过参数值把被抛弃的异常对象传寄给catch块 -在catch块中是对异常对象进行处理的代码,与访问其他对象一样,可以访问一个异常对象的变量或调用它的方法。getmessage()是类throwable所提供的方法,用来得到有关异常事件的信息,类throwable还提供了方法printstacktrace()用来跟踪异常事件发生时执行堆栈的内容,java,java的异常处理,try catch(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语句的顺序,捕获异常的顺序和不同catch语句的顺序有关,当捕获到一个异常时。剩下的catch语句就不再进行匹配。 因此在安排catch语句的顺序时,首先应该捕获最特殊的异常,然后在逐渐一般化,也就是一般先安排子类,再安排父类。,java,java的异常处理,finally 捕获异常的最后一步是通过finally语句为异常处理提供一个统一的出口,使得控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理。不论在try代码块中是否发生了异常事件,finally块中的语句都会被执行。,java,java的异常处理,try /1 code that might throw exceptions /2 catch(ioexception e) /3 show 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 filenotfoundexception import java.io.*; class exceptiondemo1 public static void main (string args) fileinputstream fis=new fileinputstream(“text”); ,java,java的异常处理,异常处理,积极处理方式 import java.io.*; class exceptiondemo1 public static void main (string args) try fileinputstream fis=new fileinputstream(“text”); catch(filenotfoundexcption e) ,java,java的异常处理,异常处理,消极处理方式 import java.io.*; class exceptiondemo1 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的异常处理,使用异常机制的建议,_ test throw/catch _ 154 milliseco

温馨提示

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

评论

0/150

提交评论