Java第7章Java的异常处理课件.pptx
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《Java第7章Java的异常处理课件.pptx》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 异常 处理 课件
- 资源描述:
-
1、第第7章章 Java的异常处理的异常处理l掌握异常的基本概念,了解掌握异常的基本概念,了解Java异常异常层次结构层次结构l掌握异常的处理机制和处理方法掌握异常的处理机制和处理方法l掌握异常的抛出机制掌握异常的抛出机制l了解自定义异常的方法了解自定义异常的方法学学习目标习目标:n7.1 Java的异常简的异常简介介 n7.2 异常机异常机制制n7.3 自定义异常自定义异常类类n7.4 实实训训n7.5 习题习题第第7章章 Java的异常处理的异常处理7.1.1.Java异异常常7.1.2.常用常用Java异常类列表异常类列表7.1 Java的异常简介的异常简介错误检测和处理是应用程序开发的重要
2、组成部分。Java程序执行时,不可避免会出现各种各样的错误,为了能够及时、有效地处理程序中的运行错误,Java引入了异常和异常类,并提供了丰富的处理出错与异常的措施。异常处理是Java语言的一大特色,它能够加强程序的健壮性,即使遇到异常情况,也不会造成程序崩溃。7.1 Java的异常简介的异常简介Java把程序不能正常执行的情况分为两类:错误(Error)和异常(Exception)。错误通常是指程序本身存在的非法情形,或是代码存在的逻辑问题引起的,编程人员可通过对程序更仔细的检查来减少错误。理论上讲,错误是可以避免的。而“异常”实际上是“异常事件”的简称,它指的是程序执行过程中出现的非正常情
3、况,通常是不可预测的,比如数组下标越界、所需文件找不到、除0溢出等。由于错误(Error)的排除更多依赖编程人员的编程熟练程序,异常则难以预见又必须在程序中处理,所以Java更侧重于异常处理。归纳起来,Java产生异常的原因主要有3种:第一种是Java内部错误发生时虚拟机产生的异常;第二种是程序代码中的错误产生的异常,例如空指针异常、数组越界异常等,这种异常称为“未检查的异常”;第三种是通过throw语句手动生成的异常,这种异常称为“检查的异常”,一般用来告知方法的调用者一些必要的信息。7.1.1 Java异常异常Java采用面向对象的方法来处理异常,每个异常都是一个对象。当程序运行发生异常时
4、,正在运行的方法或Java虚拟机就会产生相应的异常对象,并把它传递给运行系统,运行系统就会从产生异常的方法开始进行回溯查找,直到找到对此异常进行处理的代码来处理这一异常。如果回溯到main方法时此异常仍未被处理,或者main方法中也未对它进行处理,则程序终止运行。我们把生成异常对象并提交给运行系统的过程称为抛出(throw)一个异常。运行系统在方法的轨迹栈中回溯查找,直到找到能够处理该类型异常的方法,这一过程称为捕获(catch)一个异常。Java中定义了很多异常类。每个异常类都对应了一种特定的运行错误,异常类中包含了该运行错误的信息和处理错误的方法等内容。异常对象即类的实例。所有的异常类都直
5、接或间接地继承于类Throwable,Throwable的分类层次和继承结构 7.1.2常用常用Java异常类列表异常类列表如图7-1所示从图中可以看出,Throwable类派生了两个子类:Error和Exception。其中,Error类表示的是一些致命的异常即错误,它由系统保留,程序不能抛出这种类型的对象,Error类的对象不可捕获、不可恢复,出错时系统会通知用户并终止程序;而Exception类是所有异常类的父类,其子类对应了一些比较常见的、用户程序能够捕捉到的异常情况,可捕获、可恢复。图7-1 Exception类的层次结构Exception类的异常子类如果按照处理方式来划分,可以分为
6、:运行时异常和非运行时异常两大类。1.运行时异常运行时异常运行时异常表示的是Java程序运行时发现的由Java虚拟机抛出的各种异常,这些异常通常对应着系统运行错误,如除数为0异常、下标越界异常。这类异常的产生非常普遍,用户无须全部处理。继承于RuntimeException类的异常都属于运行时异常。表表7-1 常见的运行时异常类常见的运行时异常类异异 常常 类类 异异 常常 类类 的的 说说 明明 ArithmeticException 除数为0的异常 IndexOutOfBoundsException 下标越界异常 ArrayIndexOutOfBoundsException 访问数组元素下
7、标越界异常 ArrayStoreException 把一个错误类型的对象存入一个数组中的异常 ClassCastException 类强制转换异常 IllegalArgumentException 传递了一个错误参数给某个方法的异常 IllegalThreadStateException线程所处状态的异常 NullPointerException 使用空指针(空对象)异常 NoSuchMethodException没有某个特定方法的异常 StringIndexOutOfBoundsException 字符串下标越界异常2.非运行时异常非运行时异常非运行时异常是由Java编译器在编译时检测到的在
8、方法执行过程中可能会发生的异常。此类异常必须明确地加以处理,否则程序就无法通过编译。RuntimeException类及其子类之外的异常类都是非运行时异常。表7-2列出的是几种常见的非运行时异常类。异异 常常 类类 异异 常常 类类 的的 说说 明明 classNotFoundException 指定类或接口不存在的异常 IllegalAccessException 非法访问异常 IOException 输入/输出异常 ProtocolException 网络协议异常 SocketException Socket操作异常表表7-2 常见的非运行时异常类常见的非运行时异常类【例【例7-1】运行过
9、程中产生系统定义的异常及异常信息的显】运行过程中产生系统定义的异常及异常信息的显示示代码:程序ExceptionDemo.javapublic class ExceptionDemo static void methodA(String s)Integer i=new Integer(s);System.out.println(i);public static void main(String args)String s=123.45;methodA(s);运行结果为:运行结果为:Exception in thread main java.lang.NumberFormatException:
10、For input string:123.45“at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)at java.lang.Integer.parseInt(Integer.java:492)at java.lang.Integer.(Integer.java:677)at ExceptionDemo.methodA(ExceptionDemo.java:5)at ExceptionDemo.main(ExceptionDemo.java:12)该程序的运行结果说明,程序运行时产生一个
11、NumberFormatException数值格式异常。在用Integer的构造方法将一个字符串转换为Integer数据时,因为参数字符串格式不对,所以产生了这个运行时异常。输出的第一行信息是toString()方法输出的结果,它对这个异常对象进行简单的说明。其余各行显示的信息表示了异常产生过程中调用的方法,最后是在调用Integer.parseInt()方法时产生的异常,调用该方法的出发点在main()方法中。Java异常机制是指Java提供的用于处理程序中错误的一种机制。当Java程序运行过程中发生一个可识别的运行错误时,即该错误有一个异常类与之相对应时,系统都会产生一个该异常类的对象。一
12、旦一个异常对象产生,系统中就会有相应的机制来处理它,从而保证整个程序运行的安全性。在Java应用程序中,异常处理机制为:抛出异常,捕获异常。实现异常处理机制是通过5个关键字:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throw)一个异常,这时可以通过它的类型来捕获(catch)它,或最后(finally)由默认处理器来处理。7.2异常机制异常机制7.2.1 捕捕获异获异常常7.2.2 抛出异抛出异常常7.2.3 声声明异明异常常7.2.4 案案例:除数为例:除数为0的异常及处理的异常及处理7.2 异异常机制常机制
13、程序运行过程中,当一个异常被抛出时,识别这个被抛出的异常对象并查找处理它的方法的过程称为异常捕获。异常的捕获和处理是同时定义的,两个操作密不可分。1.try-catch语句语句在Java程序中,异常捕获和处理是用try-catch语句来实现的。一般定义格式如下:7.2.1捕获异常捕获异常try /可能抛出异常的代码块catch(异常类型 对象名)/异常处理代码通常把可能产生异常情况的语句放在try语句块中,这个try语句块用来启动Java的异常处理机制。catch语句则负责对产生的异常对象进行识别,一旦该异常对象与catch子句中的异常类型相匹配时,就执行catch之后的代码来处理异常。Jav
14、a语言还规定,每个catch语句块都应该与一个try语句块相对应。【例7-2】异常捕获与处理解题思路:程序的try块中包含了可能抛出ArithmeticException异常的语句,catch块则专门用来捕获这类异常。代码:程序ExceptionDemo2.javapublic class ExceptionDemo2 static void subroutine()int d=0;tryint a=10/d;System.out.println(本行将不会显示.);catch(ArithmeticException e)System.out.println(除数为0的异常被捕获,程序继续进行
15、.);public static void main(String args)ExceptionDemo2.subroutine();System.out.println(程序正常结束.);运行结果为:除数为0的异常被捕获,程序继续进行.程序正常结束.当try语句块中的某条语句在执行时产生了一个异常,此时被启动的异常处理机制会自动捕获到它,然后流程自动跳过异常引发点后面的所有尚未执行语句,本程序中的语句:System.out.println(本行将不会显示.);就没有执行,而产生的异常对象正好属于ArithmeticException类型,所以转去执行catch块中的语句。从执行结果还可以看出
16、,异常被捕获并执行完catch块中的语句后,继续执行catch块之后的语句。在try/catch语句中,如果没有异常发生或异常产生后没有捕获到,则跳过catch块。2.多个多个catch语语句句由于一个try语句块可能会抛出一个或多个异常,所以一个try可以有多个catch语句,每个catch块用来识别和处理一种特定类型的异常对象,它们必须紧跟在try语句块之后,catch语句块之间也不能有任何其他代码。try /可能抛出异常的代码块可能抛出异常的代码块catch(异常类型(异常类型1 对象名对象名1)/异常处理代码异常处理代码catch(异常类型(异常类型2 对象名对象名2)/异常处理代码异
17、常处理代码 catch(异常类型(异常类型n 对象名对象名n)/异常处理代码异常处理代码 如果try块产生的异常对象被第一个catch块所接收,则程序的流程将直接跳转到这个catch语句块中,处理完毕后就退出整个try/catch结构,其他catch语句块将被忽略。如果try块产生的异常对象与第一个catch块不匹配,则自动转到第二个catch块进行比对,如果仍不匹配,则转到第三个直到找到一个可以接收该异常对象的catch块。如果所有的方法中都找不到合适的catch块匹配,则由Java运行系统来处理这个异常对象。【例7-3】带有多个catch子句的try语句代码:程序MultiCatch.ja
18、vapublic class MultiCatch public static void main(String args)tryint a=args.length;System.out.println(a=+a);int b=24/a;int c=1;c4=66;String str=null;str.length();catch(ArithmeticException e)System.out.println(除数为0的异常:+e.toString();catch(ArrayIndexOutOfBoundsException e)System.out.println(数组下标超界异常:+e
19、.toString();catch(NullPointerException e)System.out.println(空指针异常:+e.toString();System.out.println(在try/catch语句后执行的一个语句.);运行结果为运行结果为:a=0除数为0的异:java.lang.ArithmeticException:/by zero在try/catch语句后执行的一个语句.运行该实例时,a=0则 除数为0,出现算术异常,此时终止执行try语句块中的语句,转而执行捕获到该异常的catch语句块,执行完catch语句块之后就退出整个try/catch块,执行try/ca
20、tch块之后的语句。try块中尚未执行的语句和其他未捕获到异常的catch块将被忽略。由于异常对象与catch块的匹配是按照catch块的先后排列顺序进行的,所以要处理多异常时应注意认真设计各catch块的排列顺序。一般地,处理较具体和较特殊的异常的catch块应放在前面,而可与多种异常相匹配的catch块应放在较后的位置,即从特殊到一般。3.try/catch语句嵌套语句嵌套try语句可以嵌套声明,即一个try语句可以在另一个try语句块内部。每次进入try语句时,异常的前后关系都会被推入堆栈。如果一个内部的try语句没有提供特定异常的catch处理程序,堆栈将弹出下一个try语句的catc
21、h处理程序检查是否与之匹配。这个过程将持续直到一个catch语句匹配成功,或者直到所有的嵌套try语句被检查耗尽。如果始终没有catch语句匹配,Java的运行系统将处理这个异常。【例7-4】try语句的嵌套代码:程序NestTry.javapublic class NestTry public static void main(String args)boolean tag=false;tryint a=args.length;int b=24/a;trytag=true;if(a=1)a=a/(a-a);if(a=2)int c=1;c4=66;Catch(ArrayIndexOutOfB
22、oundsException e)System.out.println(数组下标越界异常:+e.toString();catch(ArithmeticException e)if(tag)System.out.println(内层try语句抛出的异常);System.out.println(除数为0异常:+e.toString();当没有命令行参数时即a=0时,语句:int b=24/a;抛出除数为0异常,则跳出外层try语句块,由catch语句捕获异常并处理。运行结果为:当命令行参数的个数为1即a=1时,语句:a=a/(a-a);抛出除数为0异常,则跳出内层try语句块,然后catch语句输
23、出“除数为0异常”。运行结果为:当命令行参数的个数为2即a=2时,语句:c4=66;抛出数组下标越界异常,则跳出try语句块,catch语句输出“数组下标越界异常”。运行结果为:除数为0异常:java.lang.ArithmeticException:/by zero内层try语句抛出的异常除数为0异常:java.lang.ArithmeticException:/by zero数组下标越界异常:java.lang.ArrayIndexOutOfBoundsException:44.try-catch-finally语句语句还有一种异常捕获与处理语句是try-catch-finally语句,其
展开阅读全文