高级程序设计语言(Java版)8 异常处理知识讲解

上传人:yuzo****123 文档编号:143251881 上传时间:2020-08-27 格式:PPTX 页数:31 大小:191.08KB
返回 下载 相关 举报
高级程序设计语言(Java版)8 异常处理知识讲解_第1页
第1页 / 共31页
高级程序设计语言(Java版)8 异常处理知识讲解_第2页
第2页 / 共31页
高级程序设计语言(Java版)8 异常处理知识讲解_第3页
第3页 / 共31页
高级程序设计语言(Java版)8 异常处理知识讲解_第4页
第4页 / 共31页
高级程序设计语言(Java版)8 异常处理知识讲解_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《高级程序设计语言(Java版)8 异常处理知识讲解》由会员分享,可在线阅读,更多相关《高级程序设计语言(Java版)8 异常处理知识讲解(31页珍藏版)》请在金锄头文库上搜索。

1、第8章 异常处理,目录,8.1 异常处理概述 8.2 异常处理机制 8.3 异常类 8.4 综合实例 8.5 习题,8.1 异常处理概述,8.1.1 异常处理的概念 异常是指在某些情况下,会使当前正在执行的方法或代码块无法继续进行的问题。 异常是程序中的一些错误,但并不是所有的错误都是异常,并且错误有时候是可以避免的。例如,代码中如果少了一个分号,那么运行出来结果是提示是错误java.lang.Error;而如果代码为System.out.println(8/0),用0做了除数,那么会会抛出java.lang.ArithmeticException的异常。,运行结果: 程序说明: 在这个实例中

2、,不考虑异常的作用,因此为了避免除数为零,最好的做法就是进行一次判断if (denominator != 0),当除数不为零的时候才进入循环做除法,否则直接打印输出结果,这个时候被除数还没有声明,因此程序会出错,抛出java.lang.Error的异常。,【实例8-2】Exception.java public class Exception public static void main(String args) int denominator = 0; int numerator = 8 / denominator; System.out.println(numerator); 运行结果:

3、,8.1.2 使用异常处理的原因 程序执行时经常会出现用户输入出错、所需文件找不到、运行时磁盘空间不够、内存耗尽无法进行类的实例化、算术运算错、数组下标越界、JVM崩溃等运行错误,影响程序的正常执行。 错误及异常是不可避免的,一个好的应用程序,在满足用户要求的各种功能的同时,还应具备能预见程序执行过程中可能产生的各种异常的能力,并能为异常情况给予恰当处理。 Java语言通过面向对象的异常处理机制来解决运行期间的错误,可以预防错误的程序代码或系统错误所造成的不可预期的结果发生。,8.1.3 方法的调用堆栈 Java虚拟机用方法调用堆栈来跟踪每个线程中一系列的方法调用过程。每个线程都有一个独立的方

4、法调用堆栈,堆栈底部的是程序的入口方法main(),放一个新的方法被调用时,java虚拟机就会把描述该方法的堆栈结构置入栈顶,位于栈顶的方法是正在执行的方法。,8.2 异常处理机制,Java对异常的处理主要涉及两方面的内容: 一是抛出(throw)异常 如果程序在运行过程中出现了运行错误,并且产生的异常与系统中预定义某个异常类相对应,系统就自动产生一个该异常类的对象,这个过程称为抛出(throw)异常。 二是捕捉(catch)异常 当有异常对象抛出时,将在程序中寻找处理这个异常的代码,如果找到处理代码,则把异常对象交给该段代码进行处理,这个过程称为捕捉(catch)异常。,8.2.1 捕获异常

5、 我们经常会遇见这样的情景:程序中出现了异常但是没有相应的处理措施。这时候java语言就会自动捕获并处理异常,一般来说表现为报告异常字符串,并且在异常发生出结束程序的运行。但是,为了更好的保证程序正常运行,需要人为的捕获并处理异常。在java语言中该机制的使用是try-catch-finally结构。,try-catch-finally结构的一般格式如下: try 可能抛出异常的语句 catch ( Exception1 e) 异常处理代码 catch ( Exception2 e) 异常处理代码 finally 必需执行的代码 ,如果在程序中有效的设计了try-catch-finally结构

6、,会出现两种情况:能够捕获到异常和不能捕获到异常。 如果没有捕获到异常时,程序会跳过catch直接到finally(如图8-3 没有捕获到异常时) 如果捕获到某个异常,则进入相应的catch块内(如图8-4 捕获到某个异常时),图8-3 没有捕获到异常时 图8-4 捕获到某个异常时,8.2.2 声明异常 try-catch-finally是在产生异常的方法内部处理异常。除此之外,还可以通过调用产生异常的方法来处理这些异常。在方法的声明中使用throws语句,其一般格式如下: 方法名(参数) throws 方法体; ,【实例8-5】ThrowsException.java public clas

7、s ThrowsException static void test(int a) throws ArithmeticException, ArrayIndexOutOfBoundsException System.out.println(In Situation + a); if (a = 0) System.out.println(no Exception caught); return; else if (a = 1) int iArray = new int4; iArray10 = 3; ,public static void main(String args) /try-catch

8、-finally结构 try test(0); test(1); catch (ArrayIndexOutOfBoundsException e) System.out.println(Catch + e); finally System.out.println(in Proc finally); 运行结果: In Situation0 no Exception caught In Situation1 Catch java.lang.ArrayIndexOutOfBoundsException: 10 in Proc finally,8.2.3 抛出异常 日常生活中,例如学校中有什么问题都会

9、先去问老师,但是有一些问题例如转学是不能由老师来解决的,这时候老师就需要再去问校长,由校长来解决这个问题。可能校长还有不能解决的问题,就需要去问教育部。抛出异常也是这样的,当一个程序段发生异常时,如果自己不能够进行异常处理,就可以将抛出异常给上一层。如果上一层也不能解决就可以一直向上抛出异常,直到抛出给main方法。如果仍然不能解决,就会中断程序,将异常显示出来。,在java语言中,所有方法都是通过throw语句来抛出一个异常事件,抛出异常首先需要通过throw语句生成一个异常类的对象,其一般格式如下: throw new 异常类名; 注意:异常类名必须是Exception或其直接或间接子类。

10、利用throw语句,可以自定义异常,并显示自定义的异常信息。,【实例8-6】ThrowException.java class ThrowException public static void main(String args) try throwTest(); catch (NullPointerException e) System.out.println(Recaught: + e); ,static void throwTest() try throw new NullPointerException(test); catch (NullPointerException e) Sys

11、tem.out.println(Caught inside throwTest.); throw e; 运行结果: Caught inside throwTest. Recaught:java.lang.NullPointerException: test,8.2.4 自定义异常 尽管java内建的异常处理机制提供了丰富的异常类型,能够满足程序员的大部分需求,但有时候也需要程序员在程序中自定义异常类,根据自己的意愿来处理异常。 自定义异常的一般格式为: class 异常类名 extends Exception 方法体; ,8.3 异常类,8.3.1 java中异常类的结构 在java语言中,异

12、常有两种分类: 1)java.lang.Throwable类为所有对象的父类,可以使用异常处理机制将这些对象抛出并捕获。 2)在Throwable类中定义方法来检索与异常相关的错误信息,并打印显示异常发生的栈跟踪信息。它有Error和Exception两个基本子类: 错误(Error):JVM系统内部错误、资源耗尽等严重情况; 异常(Exception):其它因编程错误或偶然的外在因素导致的一般性问题。,图8-5 java中异常类的结构,8.3.2 运行时异常 运行时异常(RuntimeException)是指因设计或实现方式不当导致的问题。也可以说是程序员的原因导致的问题,本来可以避免发生的

13、情况。这种异常的特点是java编译器不会检查它。由于没有处理它,因此,当出现这类异常时,异常对象一直被传递到main()方法,程序将异常终止。如果采用了异常处理,异常将会被相应的程序执行处理。 表8-1给出了java语言预定义的Error异常子类,下面是运行时异常的常见子类,如表8-2 运行时异常子类:,表8-2 运行时异常子类,8.3.3 受检查异常 Exception类中除了RuntimeException子类以外的类都是受检查异常类。如表8-3 受检查异常子类:,8.4 综合实例,【实例8-9】ExceptionTest.java class ExceptionCom extends E

14、xception private static final long serialVersionUID = 1L; ExceptionCom() super(自定义异常); public class ExceptionTest public void A1(int n) System.out.println(A1前面); A2(n); System.out.println(A1后面); ,public void A2(int n) System.out.println(A2前面); try System.out.println(try的前面); A3(n); / 发生异常时不会输出 Syste

15、m.out.println(try的后面); catch (ExceptionCom e) System.err.println(e.getMessage(); finally System.out.println(无论是否发生异常); System.out.println(A2后面); public void A3(int n) throws ExceptionCom System.out.println(A3前面); A4(n); / 发生异常时不会输出 System.out.println(A3后面); ,public void A4(int n) throws ExceptionCom

16、 System.out.println(A4前面); if (n 0) throw new ExceptionCom(); / 发生异常时不会输出 System.out.println(n); / 发生异常时不会输出 System.out.println(A4后面); public static void main(String args) ExceptionTest exp = new ExceptionTest(); exp.A1(-4); ,运行结果: A1前面 A2前面 try的前面 A3前面 A4前面 自定义异常 无论是否发生异常 A2后面 A1后面,8.5 习题,6. try子句中包含 的程序段。 7. catch 的程序段。 8. finally子句中包含 的程序段 。 9. throw的作用是 。 10. throws的作用是 。 13. error和exception有什么区别? 16. 经典习题:有五个学生,每个学生有3门课的成绩,从键盘输入以上数据(

展开阅读全文
相关资源
相关搜索

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

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