Java异常是一个对象,所有异常都直接或间接的继承Throwable类,异常层次结构如图:

 

Error类代表错误,指程序无法恢复的异常情况,常见的Error类例如内存溢出StackOverflowError等。

 

Exception类代表异常,指程序有可能恢复的异常情况,分为RuntimeException和checkedException两种。

checkedException可检查异常,需要在编码时进行处理的,如IOException等。

RuntimeException运行时异常,是在程序运行时发生的异常,无法预先捕捉处理。

 

异常经常通过try catch语句块来进行处理,也可以通过throws/throw将错误抛出到上层处理

finally用在catch语句块后面,无论是否发生异常,finally代码块总会被执行

在jdk7之后,提供了语法糖,更优雅的解决方式 try-with-resource

try (FileInputStream inputStream = new FileInputStream(new File("test"))) {
    System.out.println(inputStream.read());
} catch (IOException e) {
    throw new RuntimeException(e.getMessage(), e);
}

 对代码反编译发现仍使用了finally进行处理

 

可以通过继承已有的Exception类来自定义异常,通常使用try catch捕获处理,如果需要向外抛出,可继承RuntimeException类

 

spring中可以通过注解@ControllerAdvice,@ExceptionHandler(Exception.class)来自定义异常处理

posted on 2019-09-09 22:28  MC伍  阅读(139)  评论(0编辑  收藏  举报