CoreJava基础之异常处理(Throwable)

1.概念:

目的:提高程序的容错性、健壮性

异常:程序的运行过程中出现的意外情况

异常处理:事先为程序运行中可能出现的异常所做的预案

【重点】异常处理并非避免异常而是应对异常情况

2.异常的分类

未检查异常 已检查异常
可以避免 不可避免
可处理可不处理 必须处理
发生原因来自于代码内部 发生原因来自于代码外部

3.异常的产生和传递

throw Throwable对象   抛出一个异常对象
//throw语句的作用等同于return语句

throw语句的作用等同于return语句

异常对象的传递,视同于方法的返回值传递,沿着方法的调用链向上传递

4.异常的处理

(1)声明抛出

//方法声明:
    修饰符<泛型>  返回值类型    方法名(形参列表)   抛出的异常
//throws后可抛多个异常用逗号隔开

方法的覆盖:

①方法名、参数表必须相同;

②访问修饰符相同或更宽;

③返回值类型相同或是父类方法返回值子类;(Since 5.0)

④子类方法抛出的异常的范围不能比父类更宽,子类方法只能抛出比父类方法相同或更少异常。

(2)捕获异常(一次异常一次catch,try后可跟多个catch)

//捕获异常一般格式:
try{    代码块}catch(异常的形参){    }catch(异常的形参){    }

①可以同时捕获子类异常和父类异常,但必须先捕获子类异常,再捕获父类异常;

②如果多个catch的代码相同,name多个catch可以合并在一个catch中(Since 7.0);

try{
    System.out.println("m1");
    mb(i);
    System.out.println("m2");
}catch(IOException|MyException|RuntimeException e){
    System.out.println("catch Exception");
    e.printStackTrace();
} 

③printStackTrace():打印异常的栈追踪信息,在自定义异常时,应该添加字符串参数的构造方法,以设置异常对象的message属性;

④finally子句:无论如何都会执行的代码(通常用于释放资源)

//(1)
try{}catch(){}
//(2)
try{}catch(){}finally{}
//(3)
try{}finally{}
//(3)中的try无法捕捉异常,只是为了保证finally里的代码一定要执行

面试题:

final、finalize和finally的区别?

猜你喜欢

转载自blog.csdn.net/erpang7/article/details/82021894