java异常处理PPT课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《java异常处理PPT课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 异常 处理 PPT 课件
- 资源描述:
-
1、NCEPU异常机制2022年年5月月28日星期六日星期六2一二请在这里输入您的主要叙述内容整体概述三请在这里输入您的主要叙述内容请在这里输入您的主要叙述内容2022年年5月月28日星期六日星期六3NCEPU异常的概念v在进行程序设计时,错误的产生是不可避免的 如何处理错误? 把错误交给谁去处理? 程序又该如何从错误中恢复?v这是任何程序设计语言都要解决的问题2022年年5月月28日星期六日星期六4NCEPU所谓错误,是在程序运行过程中发生的异常事件,比如除0溢出、数组越界、文件找不到等,这些事件的发生将阻止程序的正常运行。为了加强程序的强壮性(robust),程序设计时,必须考虑到可能发生的异
2、常事件并做出相应的处理。异常的概念2022年年5月月28日星期六日星期六5NCEPU openTheFile; determine its size; allocate that much memory; read-file closeTheFile; 没有错误处理的程序2022年年5月月28日星期六日星期六6NCEPUopenFiles;if (theFilesOpen) determine the length of the file; if (gotTheFileLength) allocate that much memory; if (gotEnoughMemory) read th
3、e file into memory; if (readFailed) errorCode=-1; else errorCode = -2; else errorCode=-3; else errorCode=-4 ;else errorCode=-5; 以常规方法处理错误2022年年5月月28日星期六日星期六7NCEPU程序可读性差,大量的错误处理代码混杂在程序中观察前面的程序,会发现大部分精力花在出错处理上只把能够想到的错误考虑到,此外的情况无法处理出错返回信息量太少,无法更确切的了解错误状况或原因以常规方法处理错误存在的问题2022年年5月月28日星期六日星期六8NCEPU 用异常的形式
4、处理错误try openTheFile; determine its size; allocate that much memory; read-File; closeTheFile; catch (fileopenFailed) dosomething; catch (sizeDetermineFailed) dosomething; catch (memoryAllocateFailed) dosomething; catch (readFailed) dosomething; catch (fileCloseFailed) dosomething; finally dosomething
5、; try里写我们尝试着要做的事情,每一个catch针对一种可能的错误每一个错误都有相应的处理办法,并且将实现功能(事务逻辑)与错误处理分开来2022年年5月月28日星期六日星期六9NCEPUv Java异常是Java提供的用于处理程序中错误的一种机制。v 所谓错误是指在程序运行过程中发生的一些异常事件(如:除0溢出,数组下标越界,所要读取的文件不存在)。v 设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的结果。Java的异常处理机制2022年年5月月28日星期六日星期六10NCEPUv Java程序的执行过程中如出现异常事件,可以生成一个
6、异常类对象,该异常对象封装了异常事件的信息并将被提交给Java运行时系统,这个过程称为抛出(throw)异常。v 当Java运行时系统接收到异常对象时,会寻找处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。Java的异常处理机制2022年年5月月28日星期六日星期六11NCEPUCatch an exception的异常机制的好处 使我们在一个地方将精力集中在要解决的问题上,而在另一个地方处理来自那部分代码的异常情况。try /Code that may make exception catch(Type1 id1)catch(Type1 id1)try op
7、enTheFile; determine its size; allocate that much memory; read-File; closeTheFile; catch (fileopenFailed) dosomething; catch (sizeDetermineFailed) dosomething; catch (memoryAllocateFailed) dosomething; catch (readFailed) dosomething; catch (fileCloseFailed) dosomething; finally dosomething; 2022年年5月
8、月28日星期六日星期六12NCEPU如何处理 Throw an exception throw new NullPointerException();异常发生时,你不能解决问题,所以必须抛出一个异常(throw)一个异常对象建立起来了当前运行的路径被停止,异常对象被弹出异常处理机直接管,开始寻找一个合适的地方来继续执行2022年年5月月28日星期六日星期六13NCEPU把错误处理代码从常规代码中分离出来按错误类型分组(类Exception,派生)对无法预测的错误可以捕获和处理(基类,所有的异常类都是Exception类的子类 )克服了传统方法错误信息有限的问题(getMessage)把错误传播
9、给调用堆栈(比较:全局变量,返回值)异常机制的优点method1method2method3method4探测抛出异常传 递捕获处理异常调 用2022年年5月月28日星期六日星期六14NCEPUe.printStackTace();2022年年5月月28日星期六日星期六15NCEPU在异常被抛出的过程中, , 任何方法都可以捕获异常并进行相应的处理。2022年年5月月28日星期六日星期六16NCEPU如果所有的方法都选择了抛出此异常, 最后 JVM将捕获它,输出相关的错误信息,并终止程序的运行。2022年年5月月28日星期六日星期六17NCEPU Java通过面向对象的方法来处理程序错误,在J
10、ava中,错误被称为异常(Exception)(例外) Java 处理错误的方法 在一个方法的运行过程中,如果发生了异常,则这个方法(或者是Java虚拟机)生成一个代表该异常的对象(包含了该异常的详细信息),并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。 2022年年5月月28日星期六日星期六18NCEPUJava 处理错误的方法 我们把生成异常对象并把它提交给运行时系统的过程称为抛出(throw)一个异常。 运行时系统在方法的调用栈中查找,从生成异常的方法开始进行回朔,直到找到包含相应异常处理的方法为止,这一个过程称为捕获(catch)一个异常。2022年年5月月28日星期六
11、日星期六19NCEPUn当方法因为自身无法控制的原因而不能完成其任务n文件不存在,网络连接无法建立n处理在方法、类库、类中抛出的异常n如FileInputStream.read产生IOExceptionn在大的项目中采用统一的方式处理异常时n如编写一个文字处理器n异常应该是不经常发生但却可能发生的故障n一定发生的事件不应该用例外机制来处理n异常处理用于使系统从故障中恢复n提示信息/不产生无效的结果/释放资源什么情况下使用异常机制2022年年5月月28日星期六日星期六20NCEPUn终止程序会导致资源泄漏,利用异常处理释放资源n尽可能近地处理异常,这样程序清晰易读n能在局部处理的错误不要使用异常
12、机制n异常机制的处理比正常处理效率低处理异常时的注意事项2022年年5月月28日星期六日星期六21NCEPUContents1.异常处理2.异常分类3.抛出异常4.创建异常类2022年年5月月28日星期六日星期六22NCEPU1 错误与异常 v在程序运行时,经常会出现一些非正常的现象,如死循环、非正常退出等,称为运行错误。v根据错误的性质将运行错误分成两类:错误和异常。 2022年年5月月28日星期六日星期六23NCEPU1 错误与异常 一、错误v错误是致命性的,即程序遇到了非常严重的不正常状态,不能简单地恢复执行。 v例如:程序进入了死循环,或递归无法结束、或内存溢出。v错误只能在编程阶段解
13、决,运行程序本身无法解决,只能依靠其他程序干预,否则会一直处于非正常状态。 2022年年5月月28日星期六日星期六24NCEPU1 错误与异常 二、异常v异常是非致命性的,通过某种修正后,程序还能继续执行。v例如:运算时除数为0 0,或操作数超出数据范围,或打开一个文件时发现文件并不存在,或欲装入的类文件丢失,或网络连接中断等等。 v在源程序中加入处理异常的代码,当程序运行中出现异常时,由异常处理代码调整程序运行方向,使程序仍然可以继续运行直至正常结束。 致命性的、程序自身无法解决的严重的运行错误,叫作错误;例如死循环、内存溢出,等非致命性的,可以由程序中的异常处理代码解决,程序还能继续正常运
14、行的运行错误,叫作异常。例如数组下标越界、除数为0 0,等。2022年年5月月28日星期六日星期六25NCEPU1 错误与异常 vJava通过错误类( (Error) )和异常类( (Exception) )来处理错误和异常,它们都实现了Throwable接口。 ObjectThrowableError错误类Exception异常类异常类Exception:当发生异常时,产生一个异常事件,生成一个异常对象(Exception类或其子类对象),并把它提交给运行系统,再由运行系统寻找相应的代码来处理异常。这个过程称为抛出一个异常。 异常类Exception:Exception类有各种不同的子类,分
15、别对应不同类型的异常,如除数为0的算术异常,数组下标越界异常,空指针异常等。 异常类Exception:一个异常对象可以由Java虚拟机生成,也可以由运行的方法生成。异常对象中包含了异常事件类型、程序运行状态等必要的信息。异常类Exception:异常被抛出后,运行时系统把从生成对象的代码开始,沿着方法的调用栈逐层回溯查找,直到找到相应的处理方法,并把异常对象交给该方法为止.这个过程叫作捕获一个异常。简单地说:发现异常的代码可以“抛出”一个异常,运行系统“捕获”该异常,交由程序员编写的相应代码进行异常处理。 错误类Error: (代表编译期和系统错误)Error类对象由Java虚拟机生成并抛出
16、给系统,一般不由程序处理。死循环、递归无法结束、动态链接错误等。通常只能依靠其他程序干预,否则会一直处于非正常状态。2022年年5月月28日星期六日星期六26NCEPU1 1 异常处理 一、异常的产生public class HelloWorld public static void main (String args) int i = 0;String greetings = Hello world!, No, I mean it !,HELLO WORLD! ;while ( i 4 ) System.out.println(greetings i ) ;i +; greetings0=H
17、ello world!“greetings1=No, I mean it !greetings2=HELLO WORLD! i = 0时,输出greetings0:Hello world!i = 1时,输出greetings1: No, I mean it !i = 2时,输出greetings1:HELLO WORLD!i = 3时,数组下标越界,此时系统报告异常对象类型:Exception in thread main java.lang.ArrayIndexOutOfBoundsException:3at HelloWorld.main(HelloWorld.java:9)异常对象类型:
18、数组越界异常类 第几个数组下标越界 发生异常的方法 发生异常的类 发生异常的行2022年年5月月28日星期六日星期六27NCEPU2 2 异常处理 一、异常的产生public class Try1 public static void main (String args) int i = 0;int a = 5, 6, 7, 8 ; /简单类型不new也行for ( ; i 5 ; i +) System.out.println( a + i +=+a i ) ; System.out.println( 3/0 = + ( 3/0 ) );i = 0时,输出: a 0 = 5i = 1时,输出
19、: a 1 = 6i = 2时,输出: a 2 = 7i = 3时,输出: a 3 = 8i = 4时,数组下标越界,此时系统报告异常对象类型:Exception in thread main java.lang.ArrayIndexOutOfBoundsException:4at Try1.main(Try1.java:6)此时终止程序运行,因此不会执行同样会产生异常的输出语句:2022年年5月月28日星期六日星期六28NCEPU2 2 异常处理 一、异常的产生public class Try1 public static void main (String args) int i = 0;
20、int a = 5, 6, 7, 8 ;for ( ; i 4 ; i +) System.out.println( a + i +=+a i ) ; System.out.println( 3/0 = + ( 3/0 ) );3/0时,产生算术异常,此时系统报告异常对象类型:Exception in thread main java.lang.ArithmeticExce-ption: / by zeroat Try1.main(Try1.java:9)算术异常,由分母为0产生2022年年5月月28日星期六日星期六29异常处理机制 捕获异常声明抛出异常throwsTry-catch消极的处理
21、方式积极的处理方式2022年年5月月28日星期六日星期六30NCEPU2 异常处理 v一般来说,系统捕获抛出的异常对象并输出相应的信息,同时终止程序运行,导致其后的程序无法运行。v人们总是期望可以让程序来接收并处理产生的异常对象,从而使程序可以正常地往下继续执行。这就是异常捕获和处理的意义所在。二、异常的捕获和处理2022年年5月月28日星期六日星期六31NCEPUn捕获异常: try,catch和finally语句。2 异常处理 2022年年5月月28日星期六日星期六32NCEPU2 异常处理 v在Java的异常处理机制中,提供了try catch finally语句来捕获和处理一个或多个异
22、常。v - - 语法格式为二、异常的捕获和处理可能产生异常的代码(保护代码)捕获某种异常对象进行处理的代码必然要执行的代码 try catch (ExceptionType e) finally catch语句至少有一个,可以有多个finally语句可以省略2022年年5月月28日星期六日星期六33NCEPU2 异常处理 2022年年5月月28日星期六日星期六34NCEPUpublic class SystemException public static void main(String args) int a = 68; int b = 0; try System.out.println(
23、a / b); catch (ArithmeticException e) System.out.println (“0用作了除数”); System.out.println(“getMessage=”+e.getMessage() System.out.println(“程序结束”); 这句能执行么?2022年年5月月28日星期六日星期六35NCEPUfinally语句v当一个异常被抛出时,程序的执行就不再是线性的,跳过某些行,甚至会由于没有与之匹配的catch子句而过早地返回。v利用finally子句可以保证,无论try程序块中是否抛出异常, finally程序块中的语句都会被执行到,这样
24、可以对程序的状态作统一的管理。 finally语句对增强程序的强壮性非常重要。 通常finally进行资源的清除工作:比如删除临时文件,关闭打开的文件等2022年年5月月28日星期六日星期六36NCEPU在前例中应用finally语句public class SystemException public static void main(String args) int a = 68; int b = 0; try System.out.println(a / b); catch (ArithmeticException e) System.out.println (“0用作了除数”); Sy
25、stem.out.println(“getMessage=”+e.getMessage() finally System.out.println(“程序结束”); 2022年年5月月28日星期六日星期六37NCEPU多个catch语句class ExceptionDemo2 public static void main(String args) try int a = args.length; System.out.println(a = + a); int b = 42 / a; int c = 1 ; c4 = 99; catch (ArithmeticException e) / 捕获
展开阅读全文