chap05-java exception
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java 异常
outline
z程序错误概念
z程序错误原因分析
z Java异常类介绍
z Java异常处理机制: try, catch, finally, throw, throws
z RuntimeException
z Checked & unchecked Exception
z常见的异常处理方法:getMessage,printStackTrace z Java exception class hierarchy
z Method of finding errors
程序错误概念
z程序中的错误分类:
编译错误:又称为”语法错误”,java编译器发现的错误
运行错误:程序运行时出现的严重错误,导致程序停止运行
逻辑错误:计算机无法识别,语法正确,程序逻辑错误。
z异常的概念:指程序在执行过程中出现程序本身没有预料的情况,从而导致程序错误结束。比如说:
用户输入出错
所需文件找不到
运行时磁盘空间不够
内存不够
算术运算错(数的溢出,被零除…)
数组下标越界
z使用异常机制的目的:用来在发生运行异常时告诉程序如何控制自身的运行,以防止错误的进一步恶化
异常类的层次结构
异常处理
z打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。
z Java中的异常类定义了程序中遇到的轻微的错误条件。
z Java中的错误类定义了程序中不能恢复的严重错误条件。如内存溢出、类文件格式错误等。这一类错误由Java运行系统处理,不需要我们去处理。
异常处理
z Java程序在执行过程中如出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。
z当Java运行时系统接收到异常对象时,会寻找能处理这一异常的代码并把当前异常对象交给其处理,这一过程称为捕获(catch)异常。
z如果Java运行时系统找不到可以捕获异常的方法,则运行时系统将终止,相应的Java程序也将退出。
z try/catch/finally语句。
异常处理
z对于RuntimeException,通常不需要我们去捕获,这类异常由Java运行系统自动抛出并自动处理。
z如果父类中的方法抛出多个异常,则子类中的覆盖方法要么抛出相同的异常,要么抛出异常的子类,但不能抛出新的异常(注:构造方法除外)。
z我们可以在方法声明时,声明一个不会抛出的异常,Java编译器就会强迫方法的使用者对异常进行处理。
这种方式通常应用于abstract base class和interface中。
异常的优势
z
与传统的错误处理方法相比异常的优点:
1.把错误代码从常规代码中分离出来
2. 把错误传播给调用堆栈
3. 按错误类型分组
4. 系统提供了对于一些无法预测的错误的捕获和处理
5. 克服了传统方法的错误信息有限的问题
method1method2method3method4产生异常
传递处理异常
Java异常处理机制
z Every method is allowed to have two exit paths
No errors occur
–Method exits in the normal way
–Returns a value
–Control passed to the calling code.
If errors occur
–Method exits via an alternative exit path(exception
handling path)
–Throws an object that encapsulates the error information
–Control passed to exception mechanism that searches for
an appropriate exception handler to deal with the error
condition
异常(Exception)
z运行系统从错误发生处开始寻找处理错误的程序段
The exception handler chosen is said to catch the exception(捕获异常)
捕获异常的过程可以沿方法调用的逆向顺序寻找
z 为什么采用异常(Exception) 隔绝正常代码和错误处理代码 对错误进行分类,针对不同错误作不同处理异常(Exception)
readFile {try {open the file;determine its size;allocate that much memory;read the file into memory;
close the file;} catch (fileOpenFailed) {doSomething;
} catch (sizeDeterminationFailed) {
doSomething;
} catch (memoryAllocationFailed) {
doSomething;
} catch (readFailed) {
doSomething;
} catch (fileCloseFailed) {
doSomething;
}
}