第十六章 16.1.2 异常的分类和避免,捕获

112 阅读2分钟

异常的分类

java.lang.Exception类是所有异常的超类,主要分为以下两种:

  • RuntimeException - 运行时异常,也叫作非检测性异常
  • IOException和其它异常 - 其它异常,也叫作检测性异常,所谓检测性异常就是指在编译阶段都能

被编译器检测出来的异常。

  • 其中RuntimeException类的主要子类:
  • ArithmeticException类 - 算术异常
  • ArrayIndexOutOfBoundsException类 - 数组下标越界异常
  • NullPointerException - 空指针异常
  • ClassCastException - 类型转换异常
  • NumberFormatException - 数字格式异常

注意:

当程序执行过程中发生异常但又没有手动处理时,则由Java虚拟机采用默认方式处理异常,而默认

处理方式就是:打印异常的名称、异常发生的原因、异常发生的位置以及终止程序。

  • ArithmeticException****算术异常

image.png

  • ArrayIndexOutOfBoundsException****类 - 数组下标越界异常
  • image.png
  • NullPointerException - 空指针异常
  • image.png
  • ClassCastException - 类型转换异常
  • image.png
  • NumberFormatException - 数字格式异常
  • image.png

异常就像感冒,需要去预防。

但是在以后的开发中尽量使用if条件判断来避免异常的发生。

但是过多的if条件判断会导致程序的代码加长、臃肿,可读性差。

异常的捕获

**语法格式**

**try {**

**编写可能发生异常的代码;**

**}**

**catch(异常类型 引用变量名) {**

**编写针对该类异常的处理代码;**

**}**

**...**

**fifinally {**

**编写无论是否发生异常都要执行的代码;**

**}**

image.png

异常捕获的运行流程

//没有异常情况下的打印

image.png

运行结果:

image.png

有异常情况的运行流程

image.png

在程序执行过程中发生异常,而且没有手动处理空指针异常的执行流程,空指针导致正序结束。

image.png

当程序执行过程中发生异常并且手动处理空指针异常的执行流程。

手动处理异常和没有处理的区别:代码是否可以继续向下执行。

日常工作中,对于异常的出现则是弹出窗口进行提示连续管理员处理。

异常捕获时的注意事项

注意事项

a.​​当需要编写多个​​catch​​分支时,切记小类型应该放在大类型的前面;

b.​​懒人的写法:

catch(Exception e) {}

c.fifinally​​通常用于进行善后处理,如:关闭已经打开的文件等。

执行流程

try {

a;

b; - ​​可能发生异常的语句

c;

}catch(Exception ex) {

d;

}fifinally {

e;

}

​ ​​当没有发生异常时的执行流程:​​a b c e;

​ ​

当发生异常时的执行流程:a b d e;