《常见错误和异常处理.ppt》由会员分享,可在线阅读,更多相关《常见错误和异常处理.ppt(26页珍藏版)》请在三一办公上搜索。
1、,第六章 常见错误和异常处理 成都东软信息技术学院 计算机系 季建华,Beyond Technology,B313,第6章 常见错误和异常处理,开发应用程序时出现错误是不可避免的。对待程序中出现错误的正确态度:尽可能的少有错误;不要恐慌,不要掩盖错误。程序运行过程中出现的常见的错误类型。学习调试的方法。学习异常处理是为了让可能的错误发生在控制中。,6.1常见的错误,了解常见的错误是为了避免这些错误。常见的错误有:编译时出现错误、运行时期发生的错误、运行后发现的错误,即发现程序运行结果不合要求。,编译错误,Java语言初学者常犯的错误:大小写形式混淆使用未定义的变量使用未初始化的变量数据类型与变
2、量类型不符语句后遗漏了分号小括号不配对养成良好的编程习惯,借助开发工具可以减少编译错误。,运行错误,程序运行时可能因为各种错误而运行中断。除数为零数组下标越界,数组下标越界int a=new int10;for(int i=1;i=10;i+)system.out.println(ai);,逻辑错误,这类错误合乎语法程序运行后没有得到预期的效果1,超出数据类型的数值范围2,将“=”写成了“=”3,大括号问题,最好在任何情况下都使用大括号将语句体括起来int sum=0;int i=1;While(i=100)sum=+i;i+;,6.2 异常处理,用户期望程序可以聪明地处理所出现的错误,比如:
3、返回到一个安全的状态并且允许用户执行其它程序。程序出现错误后你的程序起码可以应该:通知用户程序出现了一个错误保存全部工作允许用户安全地退出程序,6.2.1 什么是异常处理,什么是异常?异常实际上是程序中错误导致中断了正常的指令流的一种事件.没有处理错误的程序:readFile open the file;determine its size;allocate that much memory;read the file into memory;close the file;,errorCodeType readFile/以常规方法处理错误initialize errorCode=0;open
4、the file;if(theFileIsOpen)determine the length of the file;if(gotTheFileLength)allocate that much memory;if(gotEnoughMemory)read the file into memory;if(readFailed)errorCode=-1;else errorCode=-2;else errorCode=-3;close the file;if(theFileDidntClose,观察前面的程序你会发现大部分精力花在出错处理上了.只把能够想到的错误考虑到,对以外的情况无法处理程序可
5、读性差出错返回信息量太少,用Java中的异常机制处理错误try open the file;determine its size;allocate that much memory;read the file into memory;close the file;catch(fileopenFailed)dosomething;catch(sizeDetermineFailed)dosomething;catch(memoryAllocateFailed)dosomething;catch(readFailed)dosomething;catch(fileCloseFailed)dosomet
6、hing;,和传统的方法比较异常的优点:1.把错误代码从常规代码中分离出来,提高了可读性2.把错误传播给 调用堆栈3.按错误类型和 错误差别分组,可以利用类的层次性 统一处理或分别处理异常。4.系统提供了对于一些无法预测的错误的捕获和处理5.克服了传统方法的错误信息有限的问题,6.2.2 Exception类,Java语言每一种Exception类都对应一种特定的运行错误。熟悉常见的已定义的系统异常。用户可以自定义异常来处理用户程序中特定的逻辑运行错误,6.2.3 异常处理的过程,try/接受监视的程序块,在此区域内发生/的异常,由catch中指定的程序处理;catch(要处理的异常种类和标识
7、符)/处理异常;catch(要处理的异常种类和标识符)/处理异常;通常将较具体和较常见的异常的处理放在前面。,一定会执行的程序块-finally异常处理的统一出口try/常规的代码;catch()/处理异常 finally/不论发生什么异常(或者不发生任何异常),都要执行的部分;,finally在文件处理时非常有用try 对文件进行处理的程序;catch(IOException e)/对文件异常进行处理;finally 不论是否发生异常,都关闭文件;,一个方法不处理它产生的异常,而是沿着调用层次向上传递,由调用它的方法来处理这些异常,叫声明异常.声明异常的方法在产生异常的方法名后面加上要抛出(
8、throws)的异常的列表public static int num(int i)throws ArithmeticException if(i=0)throw new ArithmeticException(“除数不能为0”);return(10/i)returnType methodName(parameterlist)throws exceptionList,6.2.5 自定义异常处理,对于Java系统监测不到的异常(接收数据为非法数据等),可以由用户自己定义异常来识别处理.用户自定义的异常类一般都是Exception类的直接或间接子类。,创建自定义异常的基本步骤如下。(1)定义一个新的
9、异常类,其必须继承Throwable或Exception类、Exception类的子类或用户自定义的其他异常类。定义的格式如下:class 自定义异常类名 extends 父异常类名 语句体,(2)为新的异常类定义属性和方法,或重载父类的属性和方法,使之能够体现出程序中出现这种异常的信息。public class NumberRangeException extends Exception public NumberRangeException()super();public NumberRangeException(String s)super(s);,(3)抛出用户自定义的异常。用户自定义
10、异常不可能依靠系统自动抛出,而必须通过throw语句抛出异常,通常是通过条件判断确定是否抛出这个异常类的新对象。抛出用户自定义异常格式如下:返回类型 方法名(参数1,参数2,)throw 自定义异常类 if(条件判断)throw(new 自定义异常类名(this);,使用异常机制的一些技巧,不要过度使用异常异常处理会花费很多时间,滥用异常,可能会明显降低程序的运行速度所以:异常不能代替简单的测试(只有在异常情况下才使用异常)不要过分细化异常(最好能把整个任务包装在一个try块中)不在压制异常(不要关闭重要的异常)不要羞于传递异常(传递异常比捕获异常更好),如何减少错误,设计良好的程序养成良好的编程习惯使用高效的Java程序开发工具严格的测试,