《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理

上传人:E**** 文档编号:89404121 上传时间:2019-05-24 格式:PPT 页数:20 大小:125.50KB
返回 下载 相关 举报
《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理_第1页
第1页 / 共20页
《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理_第2页
第2页 / 共20页
《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理_第3页
第3页 / 共20页
《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理_第4页
第4页 / 共20页
《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理》由会员分享,可在线阅读,更多相关《《Java语言程序设计》-郭磊-电子教案 第04章 Java中的异常处理(20页珍藏版)》请在金锄头文库上搜索。

1、第四章 Java中的异常处理,教授:郭磊,【本章导读】,任何计算机语言的程序都难免有漏洞,与C+类似,捕获错误最理想的是在编译期间,最好在试图运行程序以前。然而,在实际的程序设计中,并非所有错误都能在编译期间侦测到。尽管大多数现代程序设计语言提供了一些异常处理形式,但Java支持的异常处理功能比其他语言提供的更灵活。当Java程序执行中发生错误时,错误事件对象可能导致的程序运行错误称为异常(Exception,也称例外),异常会输出错误消息,使其知道该如何正确地处理遇到的问题。 Java异常是描述在代码段中发生的运行出错情况的对象。程序中的错误可能来自于编译错误和运行错误。编译错误是由于所编写

2、的程序存在语法问题,未能通过由源代码到目标代码的编译过程而产生的错误,它将由语言的编译系统负责检测和报告;运行错误是在程序的运行过程中产生的错误。本章主要介绍异常的概念、Java的异常类、Java的异常抛出和处理方式、自定义异常类。,【本章要点】,异常的产生 异常类 异常抛出和处理方式 自定义异常类,4.1 异常的产生,当Java程序执行中发生错误时,错误事件对象可能导致的程序运行错误称为异常(Exception,也称例外),异常会输出错误消息,使其知道该如何正确地处理遇到的问题。 在程序执行中,任何中断正常程序流程的异常条件就是错误或异常。,4.1 异常的产生,Java异常的发生是由哪些因素

3、引起的呢? 第一种,Java 虚拟机检测到了非正常的执行状态。 (1)表达式的计算违反了Java 语言的语义,例如整数被0 除。 (2)在载入或链接Java 程序时出错。 (3)超出了某些资源限制,例如使用了太多的内存。 第二种,Java 程序代码中的throw 语句被执行。 第三种,异步异常发生。 异步异常的原因可能有: (1)Thread 的stop 方法被调用。 (2)Java 虚拟机内部错误发生。,4.2 异常类,在异常发生后,系统会产生一个异常事件,有哪些异常对象?这些异常对象来自那些类呢?Java中的异常类具有层次组织,其中Throwable类是Error类(错误类)和Except

4、ion类(异常类)的父类,Throwable是Object的直接子类。 异常类(java.lang.Exception)继承于java.lang.Object中的java.lang.Throwable类。异常可分为执行异常(RuntimeException)和检查异常(Checked Exceptions)两种。如图4.1所示。为了深入了解执行异常和检查异常内容,给出了它们的详细介绍列举。,4.2 异常类,4.2.1 主要的几种异常,1、执行异常 执行异常即运行时异常,继承于RuntimeException。Java编译器允许程序不对它们做出处理。下面列出了主要的运行时异常: Arithmet

5、icException:一个不寻常算术运算产生的异常。 ArrayStoreException:存入数组的内容数据类型不一致所产生的异常。 ArrayIndexOutOfBoundsException:数组索引超出范围所产生的异常。 ClassCastExcption:类对象强迫转换造成不当类对象所产生的异常。 IllegaArgumentException:程序调用时,返回错误自变量的数据类型。 IllegaThreadStateException:线程在不合理状态下运行所产生的异常。 NumberFormatException:字符串转换数值所产生的异常。 IllegaMonitorSta

6、teException:线程等候或通知对象时所产生的异常。 IndexOutOfBoundsException:索引超出范围所产生的异常。 NegativeException:数组建立负值索引所产生的异常。 NullPointerException:对象引用参考值为null所产生的异常。 SecurityException:违反安全所产生的异常。,4.2.1 主要的几种异常,2、检查异常 除了执行异常外,其余的子类是属于检查异常类也称为非运行时异常,它们都在java.lang类库内定义。Java编译器要求程序必须捕获或者声明抛弃这种异常。下面列出了主要的检查异常: ClassNotFoundE

7、xception:找不到类或接口所产生的异常。 CloneNotSupportedException:使用对象的clone方法但无法执行Cloneable所产生的异常。 IllegaAccessException:类定义不明确所产生的异常。 InstantiationException:使用newInstance方法试图建立一个类instance时所产生的异常。 InterruptedException:目前线程等待执行,另一线程中断目前线程所产生的异常。,4.3 异常的处理与抛出,此外,异常处理模块可以嵌套,允许异常处理可以发生在多个地方。嵌套异常处理通常用于当第一个处理程序无法完全从错误中

8、恢复过来的时候。 为了写出健壮的Java程序,Java编程语言要求:当一个方法在栈(即已经被调用)中发生Exception时,那么,该方法必须决定该采取什么样的处理。 为此在编写程序时可以采取的措施: (1)通过将trycatch()块纳入其代码中,在这里捕获被命名为属于某个超类的异常,并调用方法处理它。即使catch块是空的,这也算是处理情况。 (2)让被调用的方法表示它将不处理异常,而且该异常将被抛回到它所遇到的调用方法中。这通过用throws子句标记该调用方法的声明来实现。 使用throws子句标记调用方法的声明如下所示: public void troublesome() throws

9、 IOException 其中,关键字throws之后是所有异常的列表,方法可以将它们抛回到它的调用程序中。尽管这里只显示了一个IOException异常,如果有更多可能的异常通过该方法被抛出,那么,可以使用逗号分开的异常列表。 是选择处理还是选择声明抛出一个异常取决于是否给你自己或你的调用程序一个更合适的候选办法来处理异常。,4.3.1 try与catch,异常处理的核心是try和catch。这两个关键字要一起使用,只有try而没有catch,或者只有catch而没有try 都是不可以的。尽管语法允许有try而没有catch,但不能实现捕获并处理异常;而只要有catch就必须有try。当tr

10、y描述的代码段遇到异常发生时,计算机控制权由try转移到catch异常处理代码块。也就是说如果没有异常发生,程序不会执行catch描述的代码段。下面是try/catch异常处理代码块的基本形式: try/监视 可能发生异常的代码块; catch(异常类型异常对象名)/捕获并处理异常 异常处理代码块; ,4.3.2 自定义异常类,尽管Java的内置异常能够处理大多数常见错误,但有时还可能出现系统没有考虑到的异常,因此我们仍然希望建立自己的异常类型,来处理所遇到的特殊情况。这是非常简单的:只要定义Exception的一个子类就可以了(Exception当然是Throwable的一个子类)。子类不需

11、要实际执行什么它们在类型系统中的存在允许把它们当成异常使用。,4.3.3 try与多个catch,一个try代码块可以嵌入到另一个try代码块当中。由于内部try代码块产生的异常如果没有被与该内部try代码块相关的catch捕获,就会传到外部try代码块。 正如前所说,与一个try相关的catch语句可以有多个。然而这样每一个catch语句必须捕获一个不同类型的异常。某些情况,由单个代码段可能引起多个异常。处理这种情况时就需要定义两个或更多的catch子句,每个子句捕获一种类型的异常。当异常被引发时,每一个catch子句被依次检查,第一个匹配异常类型的子句被执行。当一个catch语句执行以后,

12、其他的子句被忽略,程序从try/catch块后的代码开始继续执行,4.3.3 try与多个catch,try 可能发生异常的代码块; catch(异常类型1异常对象名1) 异常处理代码块1; catch(异常类型n异常对象名n) 异常处理代码块n; ,4.3.4 throw语句,基本形式如下: throw 异常名; throw关键字主要是用在try块中,用来说明已经发生的异常情况。throw关键字后面跟随一个从类Throwable中派生的异常对象,用来说明发出的异常类型。throw语句促使程序立即停止运行,并且重复执行最近能够处理指定对象的catch语句。如果异常在程序的其他地方产生,thro

13、w语句也可以放在try语句的后面。为了把异常处理控制传递给更高层的处理模块,还可以对截获的异常对象再一次实施throw操作。,4.3.4 throw语句,下面是一个通过手动抛出IOException来说明throw关键字的例子。 例4-6throw关键字手动抛出IOException异常。 import java.io.*; public class ExceptionExam6 public static void main(String args) try System.out.println(“正在运行程序“); throw new IOException(“用户自行产生异常“); ca

14、tch(IOException e) System.out.println(“已捕获了该异常!“); ,4.3.5 throws语句,声明异常(throws) 在某些情况下,如果一个方法产生自己不处理或无法处理的异常,它就必须在throws子句中声明该异常声明抛弃异常是在一个方法声明中的throws子句中指明的。 下面是包含throws子句的方法的基本形式: 修饰符返回类型方法名(参数1,参数2,)throws异常列表 例如: public int read () throws IOException throws子句中同时可以指明多个异常,说明该方法将不对这些异常进行处理,而是声明抛弃它们。

15、例如: public static void main(String args) throws IOException, IndexOutOfBoundsException ,4.3.5 throws语句,声明抛出异常的程序的格式: import java.io.*; public class ExceptionExam public static void go() throws IOException /方法代码 public static void main(String args) /程序入口主方法代码 因为考虑到go()方法可能产生一个IOException,而此时我们无法处理该异常

16、,因此要从go()方法抛出这个异常,并且需要这样来指定异常。另外,要注意IOException是属于名为java.io的包。Java的I/O系统包含在java.io包中,因此IOException也包含在其中。所以使用语句import java.io.*;导入java.io包,然后可以直接引用IOException。,本章小结,本章主要介绍Java中异常处理,其中包括异常的概念、Java的异常类、Java的异常抛出和处理方式、自定义异常类。通过本章的学习,读者需要掌握异常处理的基本知识,能够在编写代码的同时合理加入异常处理的相关代码,使程序更加健壮。,习 题,一、简答题 1错误(error)和异常(exception)有什么主要区别? 2. 说明try-catch-finally结构的执行次序? 3说明throws语句与throw语句的区别? 二、编程题 1设计一个程序,其功能是从命令行输入整数字符

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号