JAVA教程第5章(程序异常处理)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第5章程序异常处理本章提要◆异常的概念◆异常处理机制◆throw和throws的使用引子在调试航班信息录入程序时,可能会遇到这样的情况:应用程序运行过程中,突然中止,屏幕上出现一大堆英文......让人不知所措。在许多城市,银行ATM机随处可见,取款非常方便。在ATM机上取款必须按照一定的步骤操作,若操作出错,会相应的提示信息,指导你下一步地操作。比如密码输入错误,ATM机将会显示“密码输入错误,请重新输入”的消息,如果三次密码输入都有误,则吞卡没商量。无论什么原因引起的程序运行不正常,都认为是程序出现了异常。知识要点异常的概念常见的异常情况异常处理的机制利用try-catch-finally实现异常处理利用throw、throws创建用户自定义异常问题分析知识学习事件事件处理机制任务实施任务1处理产品信息录入模块运行的异常情况执行结果问题分析任务描述仓管系统中,产品信息录入程序模块运行时出现错误,需要进行修改。步骤分析:了解异常类认识程序运行的错误类型及位置理解捕获和处理异常的机制确定需要捕获异常的代码段和显示的错误信息知识学习——异常概念异常——无论是程序本身或用户原因出现的问题,都属于程序中的异常,异常表示例外的事件。如:非法运算错误、运行内存不足、文件不存在错误、络无法连接等错误异常处理——对于异常,Java使用一种错误捕获方法进行处理,称为异常处理。异常类基类throwable派生出两个子类:Error类:定义了Java程序运行时出现了灾难性失败的异常,通常无法捕捉到Exception类:定义了程序可以捕捉到的异常在处理异常的两种方式一是将异常交由Java异常处理机制的预设处理方法来处理。二是利用Java提供的try-catch-finally语句对于可能出现的异常作预先处理。知识学习——异常概念Exception类定义了程序可捕捉的异常。Exception类派生了两个子类:RuntimeException和IOException。RuntimeException类的异常一般是编程原因,如:1)一个错误的类型转换(NumberFormatException)2)一个数组越界访问(ArrayIndexOutOfBoundsException)3)一个空指针访问(NullPointerException)4)一个除以零的算术操作(ArithmeticException)IOException类的异常原因主要一些意外情况的出现,如:1)试图读文件结尾后的数据(EOFException)2)试图打开一个错误的URL(UnknownHostException)3)试图根据一个根本不存在的类的字符串来找一个Class对象(ClassNotFoundException)知识学习——程序运行的错误类型及位置NullPointerException异常发生的原因,通常是由于应用程序企图在某个需要的对象上使用null值。如:1)使用未分配内存的对象2)调用未分配内存对象的方法3)访问或修改未分配内存对象的属性4)使用长度为null的数组由图中显示的错误信息中,可以看到出错位置在FlightInfo.java程序的328行,即字体为黑色的代码行。错误类型为NumberFormatException(数据类型转换异常)2.知识学习——程序运行的错误类型及位置实现异常处理关键字:try、catch、finally。1、try和catch语法:try{//引起异常的语句}catch(…){//出错处理程序}知识学习——捕获和处理异常的机制开始执行程序异常发生?Java运行环境创建Exception对象抛出异常系统缺省异常处理程序被执行,显示错误有异常处理程序?处理程序获取异常对象作为参数,并作相应处理程序继续执行程序结束程序中断否是是否异常处理过程例子——算术异常代码段publicvoidArithTest(intnuml,intnum2){intArithResult;ArithResult=num1/num2;System.out.println(ArithResult:+ArithResult);}当参数num2=0时,将引发算术异常java.lang.ArithmeticException。程序出错信息是:Exceptioninthreadmainjava.lang.ArithmeticException;/byzeroclassname.ArithTest(filename.java:line)atclassname.main(filename.java:line)例子——算术异常的处理对于上述代码进行异常处理:publicvoidArithTest(intnuml,intnum2){intresult;try{result=num2/numl;}catch(ArithmeticExceptione){System.out.println(“除数为零”);}System.out.println(Result:+result);}例子——NullPointerException异常importjava.awt.*;importjava.lang.*;importjava.util.*;classStudent{StringstudName;intstudAge;StringstudClass;}publicclassNullPointerTest{StudentstudObj[];publicNullPointerTest(){studObj=newStudent[2];studObj[0].studName=LingMing;studObj[0].studAge=19;studObj[0].studClass=soft011;studObj[1].studName=WangQing;studObj[1].studAge=18;studObj[1].studClass=soft012;}publicvoiddispStudent(){for(inti=0;i2;i++){System.out.println(studObj[i].studName);System.out.println(studObj[i].studAge);System.out.println(studObj[i].studClass);}}publicstaticvoidmain(Stringargs[]){NullPointerTeststud=newNullPointerTest();stud.dispStudent();}}案例NullPointTest.java修改后:......studObj=newStudent[2];try{for(inti=0;i2;i++)studObj[i]=newStudent();studObj[0].studName=LingMing;studObj[0].studAge=19;studObj[0].studClass=soft011;studObj[1].studName=WangQing;studObj[1].studAge=18;studObj[1].studClass=soft012;}catch(NullPointerExceptione){System.out.println(memorynotallocatedtoobject.....);}......NullPointerTeststud=newNullPointerTest();try{stud.dispStudent();}catch(NullPointerExceptione){System.out.println(memorynotallocatedtoobject.....);}......2、finally某些情况下,不管异常是否发生,都需要处理某些语句,可以利用finally语句来实现。finally语句的形式:finally{//需要处理的语句}例如,publicvoidFinallyTest(intnum1,intnum2){try{num1=num1/num2;//引起算术异常}catch(ArithmeticExceptione){System.out.println(“捕捉到:”+e.getMessage());//处理异常}finially{System.out.println(“执行finially”);}}下面再举一个使用多个Catch与finally的例子。例子——多个CatchpublicclassMultCatch{publicstaticvoidmain(Stringargs[]){intx=100,z1,z2;inty[]={1,2};try{z1=y[2];x=x/z1;System.out.println(result=+x);}catch(ArrayIndexOutOfBoundsExceptionE){x=0;System.out.println(捕捉超出索引异常...);}catch(ArithmeticExceptionE){x=0;System.out.println(捕捉数学运算异常...);}finally{if(x==0)System.out.println(程序执行发生异常!);elseSystem.out.println(程序正常执行完毕!);}}}调试程序过程中,可能出现的错误情况有两种:编译时出错和运行时出错。对于可能出现错误的代码段,可用try-catch-finally语句捕获异常并加以处理。需要捕获异常的代码段和显示的错误信息显示的错误信息:“数据格式转换异常,企图将空字符串转为数字类型”。任务实施修改程序,并编写异常处理的代码由于产品数量,安全库存量,价格字段必须是非空,才能将其转为数字类型,需要加入上述几个字段不能为空的判断处理代码。检验是否能捕获异常输入一个航班资料时,检验当产品数量,安全库存量,价格字段为空,是否可显示“数据格式转换异常,企图将空字符串转为数字类型”。任务实施仓库管理系统中,供应商资料处理模块运行时,对于年龄字段数据转换采用try-catch捕捉异常。动手练习30分钟问题分析知识学习自定义异常任务实施任务2限定录入产品信息的安全库存数范围问题分析任务描述仓管系统中,产品信息录入要求库存量范围在10~500个之间步骤分析:了解自定义异常类确定应用中特殊的约束理解自定义异常类的创建及应用由于Java的异常类对于某些特殊情况进行约束,如航空售票系统,12岁以上的乘客必须购买全票;此时可使用关键字throw和throws,根据需要创建自定义异常类,处理程序应用需要的约束,保证程序中数据的完整性。一个简单的用户抛出异常的例子。publicclassThrowExceptionTest{publicstaticvoidmain(Stringargs[]){try{thrownewException();//创建异常类的对象,抛出异常}知识学习——自定义异常catch(Exceptione){System.out.println(catchexception);System.out.println(exceptionmessage:);e.printStackTrace();//显示异常信息}finally{System.out.println(finished);}}}例如:classNumberExceptionTestextendsException{intnum1,num2;publicNumberExceptionTest(intx,inty){num1=x;num2=y;}publicvoidresult()throwsIllegalValueException{if(num1=0)thrownewIllegalValueExc

1 / 36
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功