JavaSE基础知识(6)—异常和异常处理

时间:2022-04-01 20:59:44

一、异常的理解及体系结构图

1、理解

异常:程序运行过程中发生的不正常现象。
java中的错误:
  语法错误
  运行异常
  逻辑错误

2、体系图

java程序在执行过程中所发生的异常分为两类:

  Error:Java虚拟机无法解决的严重问题。如JVM系统内部错误、资源耗尽等严重情况(*Error、OOM),一般不编写针对性的代码进行处理

  Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是由程序员在编写程序时,就考虑到错误的检测、错误消息的提示,以及错误的处理。

  常见的异常可分为两类:运行时异常和编译时异常。异常体系图如下,其中红色部分为受检异常,蓝色部分为非受检异常。

JavaSE基础知识(6)—异常和异常处理

二、异常处理的方式

1、抓模型

(1)语法

try{
  ①
  //容易出现异常的代码
  ②
}catch(异常类型 e){
  //处理异常的语句
  ③
}finally{
  //最后一定要执行的语句
  ④
}

执行顺序 ★
  如果出现了异常: ①③④一定执行,⑤不一定。如果异常被成功捕获,而且没有其他跳转,⑤会执行,否则⑤不执行
  如果没有出现异常:①②④一定执行, ⑤不一定。如果没有其他跳转,⑤会执行,否则⑤不执行

(2)好处

①提高了用户体验性
②将正常代码和容易出错的代码实现了分离,提高了代码的阅读性和维护性
③如果成功捕获异常,则起到了拦截异常的作用,异常后面的语句会正常执行

(3)注意事项

①catch块可以省略
②finally块可以省略
③尽量使用多个catch块,代替多个try catch
④不能滥用异常
⑤catch块可以有多个,但如果catch块的异常类型为父类类型,需要将该catch块放在最后

2、抛模型(默认异常处理方式)

(1)语法

修饰符 返回类型 方法名(参数列表) throws 异常类型XX{
}
注意:异常类型XX为方法中容易出现的异常的类型或父类类型

(2)执行特点

将异常抛给调用方,如果调用方不处理,则继续往上抛,直到抛给jvm。而jvm使用的是默认的处理方式。e.printStackTrace()

三、自定义异常

1、语法

class XXException extends Exception或RuntimeException{
  public XXException(){}
  public XXException(String msg){super(msg);}
}

2、如何使用自定义异常

在需要生成异常对象的地方,添加如下语句:
  throw new XXException(异常信息);

四、常见问题解答

1、生成异常对象的方式

2种方式:
方式一:系统自动生成异常对象
  针对于:系统定义好的异常类
方式二:手动生成异常对象
  针对于:系统定义好的异常类和自定义的异常类
  语法:throw new 异常类型(实参);

2、子类重写父类方法的异常说明

子类重写的方法抛出的异常类型可以相同或为子类类型

class Father{
  public void run() throws Exception{}
}
class Son extends Father{
  public void run() throws Exception{}
}
class Daughter extends Father{
  public void run() throws IOException{}
}

3、throws和throw对比

  说明 放的位置 后面跟的东西
throws 异常处理的方式 方法声明的地方 异常类型 public void method throws XXXException{}
throw 生成异常对象的关键字 方法体中 异常对象 throw new XXXException(msg)