文档介绍:第八章:异常处理
Java程序设计内部培训讲义
zjh@
异常的概念
异常的分类
运行时异常
捕获异常
声明异常
抛出异常
异常子类
总结
异常的概念
在Java中,提供了错误捕捉和处理机制,即异常处理机制。在程序运行过程中发生错误时,Java允许其不按照正常路径完成任务,由发现错误的方法抛出封装了错误信息的对象(异常)到其调用程序,发出已经发生问题的信号,然后立即退出;而且,程序并不在调用该方法的代码处继续执行,而是由异常处理机制开始搜索一个能够处理这种特定错误情况的异常处理器。
什么是异常?
,数组越界,文件找不到等。这类事件的发生将阻止程序的正常运行,为了争强程序的鲁棒性,计算机程序必须考虑程序运行时可能发生的异常时间及做出相应的处理。Java通过面向对象的方法来处理异常,即在方法运行中,如有异常发生,该方法生成代表该异常的一个对象并交给运行时系统,系统寻找相应的代码来处理这一异常。
和传统的方法比较异常的优点:
2. 把错误传播给调用堆栈
3. 按错误类型和错误差别分组
4. 系统提供了对于一些无法预测的错误的捕获和处理
5. 克服了传统方法的错误信息有限的问题
没有处理错误的程序:
read-file {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}
以常规方法处理错误
openFiles;
if (theFilesOpen) {
determine the lenth 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;
}else errorCode=-4 ;
}else errorCode=-5;
观察前面的程序你会发现大部分精力花在出错处理上了.
只把能够想到的错误考虑到,对以外的情况无法处理
程序可读性差
出错返回信息量太少。
用异常的形式处理错误
//read-File;
try {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}
catch(fileopenFailed) { dosomething; }
catch(sizeDetermineFailed) {dosomething;}
catch(memoryAllocateFailed){ dosomething;}
catch(readFailed){ dosomething;}
catch(fileCloseFailed) { dosomething; }
异常是一个对象,它继承自Throwable类,所有的Throwable类的子孙类所产生的对象都是例外.
Error:由Java虚拟机生成并抛出,Java程序不做处理.
Runtime Exception(被0除等系统错误,数组下标超范围):由系统检测, 用户的Java 程序可不做处理,系统将它们交给缺省的异常处理程序.
Exception(程序中的问题,可预知的): Java编译器要求Java程序必须捕获或声明所有的非运行时异常
throw:用户自己产生异常
异常的分类
Throwable
Error
Exception
RuntimeException
缺省的异常
处理程序
由用户捕获或
声明并处理
不做处理
用户自己产生的异常
要处理