一、异常概述
●异常:程序不正常的行为或者状态。inta= 5/0;
-数组越界访问
-读取文件,结果该文件不存在
●异常处理
-程序返回到安全状态
-允许用户保存结果,并以适当方式关闭程序
二、异常分类
●Throwable:所有错误的祖先
RuntimeException:程序自身的错误
●5/0,空指针,数组越界...
-非RuntimeException:外界相关的错误
●打开一个不存在文件
●加载一个不存在的类...
●Unchecked Exception: (编译器不会辅助检查的,需要程序员自己管的)异常,包括Error子 类和
RuntimeException子类。.
●非RuntimeException的Exception的子类: (编译器会辅助检查的)异常,checked exception。
●注意:编译器会检查程序是否为checked exception配置了处理。如果没有处理,会报错。
●Checked Exception(非RuntimeException的Exception的子类),程序员必须处理,以发生后处理为主。编译器会辅助检查。
●Unchecked Exception中的RuntimeException子类,程序必须处理,以预防为主。编译器不关心此类异常,也不会辅助检查。
●Error的子类,可以不用处理。
●总结
异常是程序发生不正常的行为或状态
Java异常分成Exception(程序相关)和Error(系统相关)
Java程序相关的异常又分成unchecked异常和checked异常,掌握其不同的处理原则
编译器会辅助检查checked异常
三、异常处理
●异常处理
一允许用户及时保存结果
-抓住异常,分析异常内容
-控制程序返回到安全状态
●try-catch-finally:一种保护代码正常运行的机制。
●异常结构
- try-.catch(catch可以有多个,下同)
- tr...catch... finally
tre.inally
try必须有,catch和finally至 少要有一个
●try:正常业务逻辑代码。
●catch: 当try发生异常,将执行catch代码。若无异常,绕之。●finally: 当try或catch执行结束后,必须要执行finally。
●查看例子TryDemo,java
●catch块可以有多个,每个有不同的入口形参。当已发生的异常和某一个catch块中的形参类型一致,那么将执行该catch块中的代码。如果没有一个匹配,catch也不会被触发。最后都进入finally块
●进入catch块后,并不会返回到try发生异常的位置,也不会执行后续的catch块,一个异常只能进入一个catch块。
●catch块的异常匹配是从上而下进行匹配的。
●所以一般是将小的异常写在前面,而一些大(宽泛)的异常则写在末尾。
●查看MultipleCatchDemo.java。
●方法存在可能异常的语句,但不处理,那么可以使用throws来声明异常。
●调用带有throws异常( checked exception) 的方法,要么处理这些异常,或者再次向外throws,直到main函数为止。
●参看ThrowsDemo.java和MyExceptionTest.java