异常处理
程序错误分类:
编译错误:即编译器可以发现的语法等的错误
运行错误:程序在执行时发生的错误
逻辑错误:程序最终结果和预期不一致的错误
异常:即是在程序运行时出现的错误
异常处理机制:
-
Error和Exception类都是从Throwable继承的
-
Error类是错误,表示严重的系统错误,无法根据程序处理
-
Exception类是异常,程序本身可以捕捉并进行相应的处理
具体分为:
非受检异常(运行时产生—RuntimeException),可以不进行处理
- 运行时异常可以通过判断条件来替代异常处理的过程
受检异常(编译时产生—除了RuntimeException及其子类之外的异常类),必须要进行处理,否则编译不能通过
常用异常:
异常处理的五个关键字:
try,catch,finally,throw,throws
捕获异常:
try—catch—finally结构捕获异常
-
该结构的获取:
圈住相应的代码块, 右键->Surround With->选择捕获异常的多种结构
抛出异常:当程序执行中发现异常,则会生成该异常类的对象提交给java运行时系统
try { ...
//监视代码执行过程,一旦返现异常则直接将异常抛出至catch
// 如果没有异常则直接跳转至finally}
catch (ExceptionType ExceptionObject) {
//对于异常执行的代码块,如果没有任何异常发生则不会执行;
//当接受到try抛出的异常后,ExceptionObject接收该异常对象与ExceptionType进行比较,如果类型相同则进行处理或如果类型不同则向上抛出。}
finally {
//可选执行的代码块,不管是否有异常发生,
//即使内存溢出异常也执行,通常用于处理善后清理工作。}
-
对于受检异常,除了可以用try—catch语句(此时就不需要finally块了)捕获外,还可以用throws抛出
-
try后若无catch块,则必须要有finally块
-
当有多个异常时,异常的产生是由语句顺序决定的,与catch块的顺序无关,当第一个异常产生并被抛出之后,后面的异常就不会再产生了
-
对于finally块:
-
try—catch—finally结构可以嵌套调用
throw 语句格式:
throw new 异常类型();
-
throws声明抛出异常,即声明出可能会出现的异常,不在方法中去进行异常处理,而是向上抛出交由调用者去处理
所声明的方法体可以有对异常具体的throw抛出语句,为了在自定义时使用,能够在上层中的try块中抛出
-
throw new出的对象必须是Throwable类及其子类的
throws声明格式:
函数返回类型 函数名() throws 异常名;
自定义新的异常类型:
class 异常类名 extends Exception{}
-
即相当于创建一个新的异常子类继承于Exception类,在类中自定义异常类相应的方法等
自定义的异常类有着与判断条件相似的效果,并且是面向对象的
-
根据示例去理解如何运用是很必要的