JAVA编程技术11.ppt

上传人:qwe****56 文档编号:70011707 上传时间:2023-01-14 格式:PPT 页数:24 大小:58KB
返回 下载 相关 举报
JAVA编程技术11.ppt_第1页
第1页 / 共24页
JAVA编程技术11.ppt_第2页
第2页 / 共24页
点击查看更多>>
资源描述

《JAVA编程技术11.ppt》由会员分享,可在线阅读,更多相关《JAVA编程技术11.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、Java程序设计教材:教材:Java程序设计简明教程程序设计简明教程中国水利水电出版社第第11章章 错误与异常处理错误与异常处理 在在 Java中中,错错 误误 分分 两两 类类,一一 种种 是是 异异 常常(Exception),),另一种是错误(另一种是错误(Error)。)。11.1 程序错误及类型程序错误及类型 即即使使是是有有经经验验的的程程序序员员,也也不不能能避避免免程程序序错错误误。程程序序错错误误可可以以分分为为三三类类:语语法法错错误误、运运行错误和逻辑错误。行错误和逻辑错误。1/13/20232Java 程序设计11.1.1 语法错误语法错误 在编译过程中出现的错误称为语

2、法错误在编译过程中出现的错误称为语法错误(syntax errors)或编译错误(或编译错误(compilation errors)。)。语法错误是由代码结构中的问题引起的,语法错误是由代码结构中的问题引起的,如拼错关键字,丢掉必要的标点,或者开括弧没有如拼错关键字,丢掉必要的标点,或者开括弧没有对应的闭括弧等。对应的闭括弧等。11.1.2 运行错误运行错误 运行错误(运行错误(runtime errorsruntime errors)是引起程序非正常是引起程序非正常中断的错误。运行应用程序时,当环境检测到一个中断的错误。运行应用程序时,当环境检测到一个不可能执行的操作时就出现运行错误。输入错

3、误是不可能执行的操作时就出现运行错误。输入错误是典型的运行错误。典型的运行错误。1/13/20233Java 程序设计11.1.3 逻辑错误逻辑错误 逻辑错误(逻辑错误(logic errors)是指程序没有是指程序没有按期望的要求执行。按期望的要求执行。public class ShowLogicErrors public static void main(String args)int number1=3;int number2=5;number2+=number1+number2;System.out.println(number2 is+number2);1/13/20234Java

4、程序设计11.2 程序调试程序调试 通常情况下,因为编译器指出了错误位置通常情况下,因为编译器指出了错误位置和原因,语法错误很容易发现和纠正。运行错和原因,语法错误很容易发现和纠正。运行错误也不难找,因为误也不难找,因为Java解译器在程序异常中解译器在程序异常中止时将其显示出来。止时将其显示出来。逻辑错误也称为小虫子(逻辑错误也称为小虫子(bugs),),查找和查找和改正错误的过程为调试(改正错误的过程为调试(debugging)。)。调调试的一般途径是,采用各种方法逐步缩小程序试的一般途径是,采用各种方法逐步缩小程序中错误所在的范围。可以手工跟踪(中错误所在的范围。可以手工跟踪(hand

5、trace)程序(即通过读程序找错误),或者程序(即通过读程序找错误),或者插入输出语句,显示变量的值或程序的执行流插入输出语句,显示变量的值或程序的执行流程。程。1/13/20235Java 程序设计11.3 异常和异常类型异常和异常类型 在在Java中,出现语法错误的原因是因为没中,出现语法错误的原因是因为没有遵循语言规则,它们可以有编译器检查发现有遵循语言规则,它们可以有编译器检查发现。在程序运行过程中,如果环境发现了一个不。在程序运行过程中,如果环境发现了一个不可能执行的操作,就会出现运行错误。如果程可能执行的操作,就会出现运行错误。如果程序没有按照预期的方案执行,就会发生逻辑错序没有

6、按照预期的方案执行,就会发生逻辑错误。一般来说,语法错误容易发现并纠正,因误。一般来说,语法错误容易发现并纠正,因为编译器指出了出错的位置和出错的原因。为编译器指出了出错的位置和出错的原因。1/13/20236Java 程序设计 Java给程序员提供了稳妥地处理运行错误给程序员提供了稳妥地处理运行错误的功能。利用这种称为异常处理的功能。利用这种称为异常处理(exception handling)的功能,能够开发的功能,能够开发用于重要计算的稳定程序。用于重要计算的稳定程序。运行错误会引起异常(运行错误会引起异常(exceptionexception)。)。异常异常是指程序运行过程中出现的事件,

7、它中断正是指程序运行过程中出现的事件,它中断正常的程序控制流。没有异常处理代码的程序常的程序控制流。没有异常处理代码的程序可能会非正常地结束,引起严重问题。可能会非正常地结束,引起严重问题。1/13/20237Java 程序设计11.3.1 异常类异常类 Java的异常是的异常是Throwable派生类的一个实派生类的一个实例。例。Throwable类包含在包类包含在包java.lang中,中,它的子类包含在不同的包中。与它的子类包含在不同的包中。与GUI相关的相关的错误包含在包错误包含在包java.awt中。因为数值异常与中。因为数值异常与java.lang.Number类有关,所以这一类异

8、类有关,所以这一类异常包含在包常包含在包java.lang中。通过扩展中。通过扩展Throwable或它的子类,可以创建自己的异或它的子类,可以创建自己的异常类。常类。1/13/20238Java 程序设计 异异常常类类可可以以分分为为三三种种主主要要类类型型:系系统统错错误误、异常和运行异常。异常和运行异常。系统错误(系统错误(system error)是由是由Java虚拟虚拟机抛出并在机抛出并在Error类中描述的。类中描述的。异常(异常(exception)是由是由Exception类描类描述的。述的。运行异常(运行异常(runtime exception)是由是由RuntimeExce

9、ption类描述的。类描述的。1/13/20239Java 程序设计11.3.2 必检异常和免检异常必检异常和免检异常 RuntimeExecption、Error以及它们的以及它们的子类都称为免检异常(子类都称为免检异常(unchecked exception)。)。所有其他异常都称为必检异所有其他异常都称为必检异常(常(checked exception),),意思是指编译意思是指编译器会强制程序员检查并处理它们。器会强制程序员检查并处理它们。1/13/202310Java 程序设计11.4 异常处理异常处理 Java的异常处理模型基于三种操作:声明的异常处理模型基于三种操作:声明异常(异

10、常(declaring an exception)、)、抛出异抛出异常(常(throwing an exception)和捕获异常和捕获异常(catching an exception)1/13/202311Java 程序设计11.4.1 声明异常声明异常 在在Java中,当前执行的语句属于某个方法。中,当前执行的语句属于某个方法。对于对于Java application,Java解释器调用解释器调用main方法;对于方法;对于applet,Web浏览器调用浏览器调用applet的无参构造方法,随后调用的无参构造方法,随后调用init方法。方法。每个方法都必须说明它可能抛出的必检异常每个方法都

11、必须说明它可能抛出的必检异常的类型,这称为声明异常(的类型,这称为声明异常(declaring exception)。)。1/13/202312Java 程序设计11.4.2 抛出异常抛出异常 程序检查到一个错误后,创建一个适当类程序检查到一个错误后,创建一个适当类型异常的实例并抛出它,这就称为抛出异常型异常的实例并抛出它,这就称为抛出异常(throwing exception)。)。注意声明异常的关键字是注意声明异常的关键字是throws,抛出异抛出异常的关键字是常的关键字是throw。一个方法总能抛出免检一个方法总能抛出免检异常。如果一个方法要抛出一个必检异常,那异常。如果一个方法要抛出一

12、个必检异常,那么必须在方法说明部分声明这个异常。么必须在方法说明部分声明这个异常。1/13/202313Java 程序设计11.4.3 捕获异常捕获异常 try 语句组语句组;/可能抛出异常的语句组可能抛出异常的语句组catch(Exception1 exVar1)异常异常exception1的处理器;的处理器;catch(Exception2 exVar2)异常异常exception2的处理器;的处理器;catch(ExceptionN exVarN)异常异常exceptionN的处理器;的处理器;1/13/202314Java 程序设计 如果如果try块中的某条语句抛出一个异常,块中的某条

13、语句抛出一个异常,Java就会跳过就会跳过try块中剩下的语句,开始为该块中剩下的语句,开始为该异常搜索处理代码。处理异常的代码称为异常异常搜索处理代码。处理异常的代码称为异常处理器(处理器(exception handler),),从当前的从当前的方法开始,通过方法调用链向后搜索,查找处方法开始,通过方法调用链向后搜索,查找处理代码。从第一个到最后一个逐个检查理代码。从第一个到最后一个逐个检查catch子句,看是否有某个子句,看是否有某个catch子句中的异常类实子句中的异常类实例与该异常的类型匹配。例与该异常的类型匹配。1/13/202315Java 程序设计 从从一一个个通通用用父父类类

14、可可以以派派生生出出多多种种异异常常类类。如如果果一一个个catch子子句句可可以以捕捕获获一一个个父父类类的的异异常常对对象,它就能捕获那个父类所有子类的异常对象。象,它就能捕获那个父类所有子类的异常对象。在在catch子句中指定异常的顺序是非常重要子句中指定异常的顺序是非常重要的。如果父类的的。如果父类的catch子句出现在于类的子句出现在于类的catch子句前,就会导致编译错误。子句前,就会导致编译错误。1/13/202316Java 程序设计11.5 重新抛出异常重新抛出异常当当一一个个方方法法出出现现异异常常时时,如如果果没没有有捕捕获获异异常常,该该方方法法就就会会立立即即退退出出

15、。如如果果方方法法在在退退出出之之前前需需要要执执行行某某些些任任务务,应应该该在在该该方方法法中中捕捕获获异异常常,然然后后按按如如下下面面的的结结构构将将异异常常重重新新抛抛出出,交交给给调调用它的方法:用它的方法:try statements;catch(TheException ex)perform operations before exits;throw ex;1/13/202317Java 程序设计11.6 finally子句子句 有时,不论异常是否出现或者是否被捕获,都希有时,不论异常是否出现或者是否被捕获,都希望执行某些代码。望执行某些代码。Java有一个有一个finally

16、子句可以用来子句可以用来达到这一目的。达到这一目的。try statements;catch(TheException ex)handling ex;finally finalStatements;1/13/202318Java 程序设计11.7 使用异常使用异常 由由于于异异常常处处理理需需要要初初始始化化新新的的异异常常对对象象并并重重新新返返回回调调用用堆堆栈栈,并并且且通通过过方方法法调调用用链链传传播播异异常常以以便便搜搜寻寻异异常常处处理理器器,所所以以通通常常情情况况下下异异常常处处理理需需要要更更多多的的时间和资源。时间和资源。一一个个方方法法出出现现异异常常时时,如如果果想想

17、让让该该方方法法的的调调用用者者处处理理异异常常,应应该该创创建建一一个个异异常常对对象象并并将将其其抛抛出出。如如果果能能在在发发生生异异常常的的方方法法中中处处理理异异常常,那那么么就就不不需需要要抛抛出异常。出异常。一般来说,项目中多个类上发生的共同异常,应一般来说,项目中多个类上发生的共同异常,应该考虑当作异常类处理。发生在个别方法中的简单该考虑当作异常类处理。发生在个别方法中的简单错误最好进行局部处理,不要抛出异常。错误最好进行局部处理,不要抛出异常。1/13/202319Java 程序设计11.8 断言断言 断言断言(assertion)是是Java的一个语句,它允的一个语句,它允

18、许对程序提出一个判断(假设)。断言包含一许对程序提出一个判断(假设)。断言包含一个布尔表达式,在程序运行中它应该是真。断个布尔表达式,在程序运行中它应该是真。断言用于确保程序的正确性,避免逻辑错误。言用于确保程序的正确性,避免逻辑错误。1/13/202320Java 程序设计11.8.1 声明断言声明断言 使使用用JKD中中新新的的关关键键字字assert来来声声明明断断言言(assertion),),如下所示如下所示assert assertion;或者或者assert assertion:detailMessage;其中其中assertion是一个布尔表达式,是一个布尔表达式,detail

19、Message是一个基本类型值或一个对象是一个基本类型值或一个对象值。值。1/13/202321Java 程序设计11.8.2 运行带断言的程序运行带断言的程序 默默认认情情况况下下,断断言言在在运运行行时时不不起起作作用用。为为使使它它们们有有效效,使使用用开开关关-enableassertions或或其缩写其缩写-ea,如下所示:如下所示:java-ea AssertionDemo1/13/202322Java 程序设计11.8.3 使用异常处理或断言使用异常处理或断言 不应该使用断言代替异常处理。异常处理不应该使用断言代替异常处理。异常处理用于在程序运行期间处理非常环境,断言是用于在程序

20、运行期间处理非常环境,断言是要确保程序的正确性。异常处理针对程序的要确保程序的正确性。异常处理针对程序的健壮性,而断言涉及程序的正确性。与异常健壮性,而断言涉及程序的正确性。与异常处理类似,断言不能代替正常的检验,只是处理类似,断言不能代替正常的检验,只是检测内部的一致性和有效性。断言在运行时检测内部的一致性和有效性。断言在运行时检验,可以在程序启动时打开或关闭。检验,可以在程序启动时打开或关闭。1/13/202323Java 程序设计 不要使用断言检测不要使用断言检测public方法的参数。传方法的参数。传给给public方法的有效参数被认为是方法合约方法的有效参数被认为是方法合约的一部分。无论断言是否起作用,都必须遵的一部分。无论断言是否起作用,都必须遵从合约。从合约。1/13/202324Java 程序设计

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

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁