CoreJava学习第十一课-异常处理

一:异常处理

异常是程序运行过程中不正常的情况.

1.异常的传递方式

异常的传递方式:    
    状态码方式:
        ① 包含的信息有限
        ② 可能和正常结果冲突(如果是银行卡的余额显示,则可能和状态码冲突)
        ③ 不强制要求处理(分层开发中,有时状态码传递到中层时,可能会不传递或处理)
    异常对象的方式:
        通过 throw 手动抛出异常,相当于 return. 方法抛出异常后,调用者如果不能处理异常,则继续上抛.
        直到该异常被处理,或者直到抛给JVM.JVM获取异常后,会终止程序运行,并将异常方法调用栈信息输出

2.Throwable类

Throwable(父类):
     String getMessage() 返回此 throwable 的详细消息字符串。 
     void printStackTrace() 将此 throwable 的详细方法调用栈信息输出到控制台
   |- Error         错误  严重的底层错误     无法完全避免  无法处理    不处理
   |- Exception     异常  可以处理
      |-RuntimeException        运行时异常(未检查异常)    可以完全避免  可处理可不处理 优先避免    
        编译器对于程序运行时可能产生的运行时异常,不强制要求提供处理方案.
      |-非RuntimeException       编译时异常(已检查异常)    不可完全避免  必须处理
        编译器对于程序运行时可能产生的编译时异常,强制要求必须提供处理方案,否则,编译出错. 

3.自定义异常:

自定义编译时异常 继承 Exception
自定义运行时异常 继承 RuntimeException
提供至少2个构造方法
class MyException extends Exception{
    public MyException(){}
    public MyException(String msg){
        super(msg);
    }
}
​
class MyRuntimeException extends RuntimeException{
    public MyRuntimeException(){}
    public MyRuntimeException(String msg){
        super(msg);
    }
}

4.异常的处理:

① 异常的声明 
    当一个方法无法处理可能产生的异常时,可以在方法声明处声明可能抛出的异常类型,当前方法不再负责处理,交由调用者负责处理该类型的异常.
    【throw 是一个动作,表示抛出;而 throws 是一个声明,表示本方法一旦发生这些异常,本方法不作处理,异常由调用这个方法的方法来处理。】
​
② try catch捕获异常,并处理
    try{
        ①
        ②
        ③
    }catch(异常类型1 e){
        ④
    }catch(异常类型2 e){
        ⑤
    }
    假设②处代码可能产生异常类型1 异常类型2 异常类型3 共3种异常
​
    产生异常类型1的异常,程序执行:① ② ④ 
    产生异常类型2的异常,程序执行:① ② ⑤ 
    产生异常类型3的异常,程序执行:① ② catch无法捕获,继续向上抛出
    
    当try块中的代码产生异常时,会通过catch自上而下的尝试匹配,一旦匹配捕获成功,后续catch不再尝试.
    当catch的异常类型有继承关系时,优先捕获子类,其次捕获父类.

5.finally 代码块

该代码块中的代码表示无论如何一定要执行的代码.

两种写法:
try{        
}catch(异常类型 e){     
}finally{       }       
​
try{        
}finally{       }

6.方法覆盖

① 方法3要素相同
② 访问修饰符相同或更宽
③ 子类不能声明抛出比父类更多(范围)的异常(见下图)

CoreJava学习第十一课-异常处理_第1张图片

 

 

你可能感兴趣的:(CoreJava学习)