文档介绍:第 4 章异常
北京大学计算机系
代亚非
第4章异常
异常的概念
异常的分类
捕获异常
声明异常
抛出异常
创造自己的异常
总结
2
异常的概念
什么是异常?
异常实际上是程序中错误导致中断了正常的指令流的一种事件.
没有处理错误的程序:
read-file {
openTheFile;
determine its size;
allocate that much memory;
closeTheFile;
}
3
异常的概念
以常规方法处理错误
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;
4
异常的概念
观察前面的程序你会发现大部分精力花在出错处理上了.
只把能够想到的错误考虑到,对以外的情况无法处理
程序可读性差
出错返回信息量太少
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; }
}
6
异常的概念
和传统的方法比较异常的优点:
2. 把错误传播给调
用堆栈
3. 按错误类型和
错误差别分组
4. 系统提供了对于一些无法预测的错误的捕获和处理
5. 克服了传统方法的错误信息有限的问题
method1
method2
method3
method4
产生异常
传递
处理异常
7
异常的概念
.
class ExcepTest
{ public void main(String args[])
{ int b=0; int a;
try { a=4/b;}
catch(ArithmeticException e)
{ (“divided by 0”);} }}
try{ URL url=new
URL(/”,””);}
catch(MalformedURLEception e)
{ badURL=true; repaint();}
8
异常的分类
异常是一个对象,它继承自Throwable类,所有的Throwable类的子孙类所产生的对象都是例外.
Error:由Java虚拟机生成并抛出,Java程序不做处理.
Runtime Exception(被0除等系统错误,数组下标超范围):由系统检测, 用户的Java 程序可不做处理,系统将它们交给缺省的异常处理程序.
Exception(程序中的问题,可预知的): Java编译器要求Java程序必须捕获或声明所有的非运行时异常
throw:用户自己产生异常
9
异常的分类
.
Throwable
Error
Exception
RuntimeException
缺省的异常
处理程序
由用户捕获或
声明并处理
不做处理
用户自己产生的异常
要处理
10