JAVA开发与应用 异常

上传人:沈*** 文档编号:251913070 上传时间:2024-11-11 格式:PPT 页数:41 大小:118KB
返回 下载 相关 举报
JAVA开发与应用 异常_第1页
第1页 / 共41页
JAVA开发与应用 异常_第2页
第2页 / 共41页
JAVA开发与应用 异常_第3页
第3页 / 共41页
点击查看更多>>
资源描述
*,*,单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,Java,的异常处理,什么是异常,?,异常就是在程序的运行过程中所发生的异常事件,它中断指令的正常执行。,打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。,没有处理错误的程序,:,read-file,openTheFile,;,determine its size;,allocate that much memory;,closeTheFile,;,以常规方法处理错误,openFiles,;,if(,theFilesOpen,),determine the,lenth,of the file;,if(,gotTheFileLength,),allocate that much memory;,if(,gotEnoughMemory,),read the file into memory;,if(,readFailed,),errorCode,=-1;,else,errorCode,=-2;,else,errorCode,=-3;,else,errorCode,=-4;,else,errorCode,=-5;,观察前面的程序你会发现大部分精力花在出错处理上了,.,只把能够想到的错误考虑到,对以外的情况无法处理,程序可读性差,出错返回信息量太少,用异常的形式处理错误,read-File;,try,openTheFile,;,determine its size;,allocate that much memory;,closeTheFile,;,catch(fileopenFailed,),dosomething,;,catch(sizeDetermineFailed,),dosomething,;,catch(memoryAllocateFailed,),dosomething,;,catch(readFailed,),dosomething,;,catch(fileCloseFailed,),dosomething,;,和传统的方法比较异常的优点,:,1.,把错误代码从常规代码中分离出来,2.,把错误传播给调用堆栈,3.,按错误类型和错误差别分组,4.,系统提供了对于一些无法预测的错误的捕获和处理,5.,克服了传统方法的错误信息有限的问题,异常示例,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,();,/,编译时异常,G:javaExceptionDemo1.java:5:unreported exception,java.io.FileNotFoundException,;must be caught or declared to be thrown,FileInputStream,fis,=new,FileInputStream,(text);,G:javaExceptionDemo1.java:7:unreported exception,java.io.IOException,;must be caught or declared to be thrown,while(b=,fis.read,()!=-1),G:javaExceptionDemo1.java:11:unreported exception,java.io.IOException,;must be caught or declared to be thrown,fis.close,();,3 errors,class ExceptionDemo2,public static void main(String,args,),int,a=0;,System.out.println,(5/a);,/,运行时异常,Java,程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给,Java,运行时系统,这个过程称为抛出,(throw),异常。,当,Java,运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获,(catch),异常。,如果,Java,运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的,Java,程序也将退出。,异常处理,Java,编程语言提供了一个来考虑哪个异常被抛出以及如何来恢复它的机制。,try,和,catch,语句,try,/code that might throw a particular exception,catch(,MyExceptionType,e),/code to execute if a,MyExceptionType,exception is thrown,catch(Exception e),/code to execute if a general Exception,exception,is thrown,要处理特殊的异常,将能够抛出异常的代码放入,try,块中,然后创建相应的,catch,块的列表,每个可以被抛出异常都有一个。如果生成的异常与,catch,中提到的相匹配,那么,catch,条件的块语句就被执行。在,try,块之后,可能有许多,catch,块,每一个都处理不同的异常。,调用栈机制,如果方法中的一个语句抛出一个没有在相应的,try/catch,块中处理的异常,那么这个异常就被抛出到调用方法中。,如果异常也没有在调用方法中被处理,它就被抛出到该方法的调用程序。这个过程要一直延续到异常被处理。如果异常到这时还没被处理,它便回到,main(),,而且,即使,main(),不处理它,那么,该异常就异常地中断程序。,考虑这样一种情况,在该情况中,main(),方法调用另一个方法(比如,,first(),),然后它调用另一个(比如,,second(),)。如果在,second(),中发生异常,那么必须做一个检查来看看该异常是否有一个,catch,;如果没有,那么对调用栈(,first(),)中的下一个方法进行检查,然后检查下一个(,main(),)。如果这个异常在该调用栈上没有被最后一个方法处理,那么就会发生一个运行时错误,程序终止执行。,异常类的层次,在,jdk,中,每个包中都定义了异常类,而,所有的异常类都直接或间接地继承于,Throwable,类,。,java,中的异常类(,Throwable,),可分为两大类:,Error,Exception,异常类的层次结构,Java,中的异常类定义了程序中遇到的轻微的错误条件。,Java,中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由,Java,运行系统处理,不需要我们去处理,。,常见的异常,ArithmeticException,ArrayIndexOutOfBandsException,ArrayStoreException,IOException,FileNotFoundException,NullPointerException,MalformedURLException,NumberFormatException,OutOfMemoryException,ArithmeticException,整数被,0,除,运算得出的结果。,int,I=12/0,;,NullPointerException,当对象没被实例化时,访问对象的属性或方法的尝试:,Date d=null;,System.out.println(d.toString,();,NegativeArraySizeException,创建带负维数大小的数组的尝试。,ArrayIndexoutofBoundsException,访问超过数组大小范围的一个元素的尝试。,SecurityException,典型地被抛出到浏览器中,,SecurityManager,类将抛出,applets,的一个异常,该异常企图做下述工作(除非明显地得到允许):,访问一个本地文件,打开主机的一个,socket,,这个主机与服务于,applet,的主机不是同一个。,在运行时环境中执行另一个程序,异常处理机制,抛出(,throw,),异常:,在,Java,程序的执行过程中,如果出现了异常事件,就会生成一个,异常对象,。,生成的异常对象将传递给,Java,运行时系统,这一异常的产生和提交过程称为抛出,(throw),异常,。,两种处理异常的机制:,捕获异常:,当,Java,运行时系统得到一个异常对象时,它将会寻找处理这一异常的代码。找到能够处理这种类型的异常的方法后,运行时系统把当前异常对象交给这个方法进行处理,这一过程称为捕获,(catch),异常。,如果,Java,运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的,Java,程序也将退出。,声明抛弃异常:,如果一个方法并不知道如何处理所出现的异常,则可在方法声明时,声明抛弃(,throws,),异常。这是一种消极的异常处理机制,(,将异常传播到方法的外部进行处理,),。,异常的处理,java,语言中有两种异常处理机制:捕获异常和声明抛弃异常。下面我们做详细介绍。,捕获异常,捕获异常是通过,try-catch-finally,语句实现的。,try,.,catch(ExceptionName1 e),.,catch(ExceptionName2 e),.,.,finally,.,try,捕获异常的第一步是用,try,选定捕获异常的范围,由,try,所限定的代码块中的语句在执行过程中可能会生成异常对象并抛弃。,catch,每个,try,代码块可以伴随一个或多个,catch,语句,用于处理,try,代码块中所生成的异常事件。,catch,语句只需要一个形式参数指明它所能够捕获的异常类型,这个类必须是,Throwable,的子类,运行时系统通过参数值把被抛弃的异常对象传递给,catch,块。,在,catch,块中是对异常对象进行处理的代码,与访问其它对象一样,可以访问一个异常对象的变量或调用它的方法。,getMessage,(),是类,Throwable,所提供的方法,用来得到有关异常事件的信息,类,Throwable,还提供了方法,printStackTrace,(),用来跟踪异常事件发生时执行堆栈的内容。,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);,catch,语句的顺序:,捕获异常的顺序和,catch,语句的顺序有关,当捕获到一个异常时,剩下的,catch,语句就不再进行匹配。,因此,,在安排,catch,语句的顺序时,首先应该捕获最特殊的异常,然后再逐渐一般化。也就是一般先安排子类,再安排父类。,finally,捕获异常的最后一步是通过,finally,语句为异常处理提供一个统一的出口,使得在控制流转到程序的其它部分以前,能够对程序的状态作统一的管理。,不论在,try,代码块中是否发生了异常事件,,finally,块中的语句都会被执行。,finally,在文件处理时非常有用,try,对文件进行处理的程序,;,catch(IOException,e),/,对文件异常进行处理,;,finally,不论是否发生异常,都关闭文件,;,声明抛弃异常,1,声明
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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