Java程序设计简明教程 p11

上传人:E**** 文档编号:89389644 上传时间:2019-05-24 格式:PPT 页数:24 大小:56KB
返回 下载 相关 举报
Java程序设计简明教程 p11_第1页
第1页 / 共24页
Java程序设计简明教程 p11_第2页
第2页 / 共24页
Java程序设计简明教程 p11_第3页
第3页 / 共24页
Java程序设计简明教程 p11_第4页
第4页 / 共24页
Java程序设计简明教程 p11_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《Java程序设计简明教程 p11》由会员分享,可在线阅读,更多相关《Java程序设计简明教程 p11(24页珍藏版)》请在金锄头文库上搜索。

1、Java程序设计,教材:Java程序设计简明教程 中国水利水电出版社,2019年5月24日星期五12时43分38秒,Java 程序设计,2,第11章 错误与异常处理 在Java中,错误分两类,一种是异常(Exception),另一种是错误(Error)。 11.1 程序错误及类型 即使是有经验的程序员,也不能避免程序错误。程序错误可以分为三类:语法错误、运行错误和逻辑错误。,2019年5月24日星期五12时43分38秒,Java 程序设计,3,11.1.1 语法错误 在编译过程中出现的错误称为语法错误(syntax errors)或编译错误(compilation errors)。语法错误是由

2、代码结构中的问题引起的,如拼错关键字,丢掉必要的标点,或者开括弧没有对应的闭括弧等。 11.1.2 运行错误 运行错误(runtime errors)是引起程序非正常中断的错误。运行应用程序时,当环境检测到一个不可能执行的操作时就出现运行错误。输入错误是典型的运行错误。,2019年5月24日星期五12时43分38秒,Java 程序设计,4,11.1.3 逻辑错误 逻辑错误(logic errors)是指程序没有按期望的要求执行。 public class ShowLogicErrors public static void main(String args) int number1=3; in

3、t number2=5; number2+=number1+number2; System.out.println(“number2 is “+number2); ,2019年5月24日星期五12时43分38秒,Java 程序设计,5,11.2 程序调试 通常情况下,因为编译器指出了错误位置和原因,语法错误很容易发现和纠正。运行错误也不难找,因为Java解译器在程序异常中止时将其显示出来。 逻辑错误也称为小虫子(bugs),查找和改正错误的过程为调试(debugging)。调试的一般途径是,采用各种方法逐步缩小程序中错误所在的范围。可以手工跟踪(hand trace)程序(即通过读程序找错误)

4、,或者插入输出语句,显示变量的值或程序的执行流程。,2019年5月24日星期五12时43分38秒,Java 程序设计,6,11.3 异常和异常类型 在Java中,出现语法错误的原因是因为没有遵循语言规则,它们可以有编译器检查发现。在程序运行过程中,如果环境发现了一个不可能执行的操作,就会出现运行错误。如果程序没有按照预期的方案执行,就会发生逻辑错误。一般来说,语法错误容易发现并纠正,因为编译器指出了出错的位置和出错的原因。,2019年5月24日星期五12时43分38秒,Java 程序设计,7,Java给程序员提供了稳妥地处理运行错误的功能。利用这种称为异常处理(exception handli

5、ng)的功能,能够开发用于重要计算的稳定程序。 运行错误会引起异常(exception)。异常是指程序运行过程中出现的事件,它中断正常的程序控制流。没有异常处理代码的程序可能会非正常地结束,引起严重问题。,2019年5月24日星期五12时43分38秒,Java 程序设计,8,11.3.1 异常类 Java的异常是Throwable派生类的一个实例。Throwable类包含在包java.lang中,它的子类包含在不同的包中。与GUI相关的错误包含在包java.awt中。因为数值异常与java.lang.Number类有关,所以这一类异常包含在包java.lang中。通过扩展Throwable或它

6、的子类,可以创建自己的异常类。,2019年5月24日星期五12时43分38秒,Java 程序设计,9,异常类可以分为三种主要类型:系统错误、异常和运行异常。 系统错误(system error)是由Java虚拟机抛出并在Error类中描述的。 异常(exception)是由Exception类描述的。 运行异常(runtime exception)是由RuntimeException类描述的。,2019年5月24日星期五12时43分38秒,Java 程序设计,10,11.3.2 必检异常和免检异常 RuntimeExecption、Error以及它们的子类都称为免检异常(unchecked e

7、xception)。所有其他异常都称为必检异常(checked exception),意思是指编译器会强制程序员检查并处理它们。,2019年5月24日星期五12时43分38秒,Java 程序设计,11,11.4 异常处理 Java的异常处理模型基于三种操作:声明异常(declaring an exception)、抛出异常(throwing an exception)和捕获异常(catching an exception),2019年5月24日星期五12时43分38秒,Java 程序设计,12,11.4.1 声明异常 在Java中,当前执行的语句属于某个方法。对于Java applicatio

8、n,Java解释器调用main方法;对于applet,Web浏览器调用applet的无参构造方法,随后调用init方法。每个方法都必须说明它可能抛出的必检异常的类型,这称为声明异常(declaring exception)。,2019年5月24日星期五12时43分38秒,Java 程序设计,13,11.4.2 抛出异常 程序检查到一个错误后,创建一个适当类型异常的实例并抛出它,这就称为抛出异常(throwing exception)。 注意声明异常的关键字是throws,抛出异常的关键字是throw。一个方法总能抛出免检异常。如果一个方法要抛出一个必检异常,那么必须在方法说明部分声明这个异常。

9、,2019年5月24日星期五12时43分38秒,Java 程序设计,14,11.4.3 捕获异常 try 语句组; /可能抛出异常的语句组 catch(Exception1 exVar1) 异常exception1的处理器; catch(Exception2 exVar2) 异常exception2的处理器; catch(ExceptionN exVarN) 异常exceptionN的处理器; ,2019年5月24日星期五12时43分38秒,Java 程序设计,15,如果try块中的某条语句抛出一个异常,Java就会跳过try块中剩下的语句,开始为该异常搜索处理代码。处理异常的代码称为异常处理

10、器(exception handler),从当前的方法开始,通过方法调用链向后搜索,查找处理代码。从第一个到最后一个逐个检查catch子句,看是否有某个catch子句中的异常类实例与该异常的类型匹配。,2019年5月24日星期五12时43分38秒,Java 程序设计,16,从一个通用父类可以派生出多种异常类。如果一个catch子句可以捕获一个父类的异常对象,它就能捕获那个父类所有子类的异常对象。 在catch子句中指定异常的顺序是非常重要的。如果父类的catch子句出现在于类的catch子句前,就会导致编译错误。,2019年5月24日星期五12时43分38秒,Java 程序设计,17,11.5

11、 重新抛出异常 当一个方法出现异常时,如果没有捕获异常,该方法就会立即退出。如果方法在退出之前需要执行某些任务,应该在该方法中捕获异常,然后按如下面的结构将异常重新抛出,交给调用它的方法: try statements; catch (TheException ex) perform operations before exits; throw ex; ,2019年5月24日星期五12时43分38秒,Java 程序设计,18,11.6 finally子句 有时,不论异常是否出现或者是否被捕获,都希望执行某些代码。Java有一个finally子句可以用来达到这一目的。 try statement

12、s; catch (TheException ex) handling ex; finally finalStatements; ,2019年5月24日星期五12时43分38秒,Java 程序设计,19,11.7 使用异常 由于异常处理需要初始化新的异常对象并重新返回调用堆栈,并且通过方法调用链传播异常以便搜寻异常处理器,所以通常情况下异常处理需要更多的时间和资源。 一个方法出现异常时,如果想让该方法的调用者处理异常,应该创建一个异常对象并将其抛出。如果能在发生异常的方法中处理异常,那么就不需要抛出异常。 一般来说,项目中多个类上发生的共同异常,应该考虑当作异常类处理。发生在个别方法中的简单错

13、误最好进行局部处理,不要抛出异常。,2019年5月24日星期五12时43分38秒,Java 程序设计,20,11.8 断言 断言(assertion)是Java的一个语句,它允许对程序提出一个判断(假设)。断言包含一个布尔表达式,在程序运行中它应该是真。断言用于确保程序的正确性,避免逻辑错误。,2019年5月24日星期五12时43分38秒,Java 程序设计,21,11.8.1 声明断言 使用JKD中新的关键字assert来声明断言(assertion),如下所示 assert assertion; 或者 assert assertion:detailMessage; 其中assertion是

14、一个布尔表达式,detailMessage是一个基本类型值或一个对象值。,2019年5月24日星期五12时43分38秒,Java 程序设计,22,11.8.2 运行带断言的程序 默认情况下,断言在运行时不起作用。为使它们有效,使用开关-enableassertions或其缩写-ea,如下所示: java-ea AssertionDemo,2019年5月24日星期五12时43分38秒,Java 程序设计,23,11.8.3 使用异常处理或断言 不应该使用断言代替异常处理。异常处理用于在程序运行期间处理非常环境,断言是要确保程序的正确性。异常处理针对程序的健壮性,而断言涉及程序的正确性。与异常处理类似,断言不能代替正常的检验,只是检测内部的一致性和有效性。断言在运行时检验,可以在程序启动时打开或关闭。,2019年5月24日星期五12时43分38秒,Java 程序设计,24,不要使用断言检测public方法的参数。传给public方法的有效参数被认为是方法合约的一部分。无论断言是否起作用,都必须遵从合约。,

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

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

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