异常的分类

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
当程序执行过程中发生异常并且手动处理空指针异常的执行流程。

手动处理异常和没有处理的区别:代码是否可以继续向下执行。
日常工作中,对于异常的出现则是弹出窗口进行提示连续管理员处理。

image.png
Exception是错误的总类,类似于Objiect类的作用。是开发过程中的懒人写法。**

异常捕获时的注意事项

注意事项
a.``当需要编写多个``catch``分支时,切记小类型应该放在大类型的前面;
b.``懒人的写法:
catch(Exception e) {}
c.fifinally``通常用于进行善后处理,如:关闭已经打开的文件等。
执行流程
try {
a;
b; - ``可能发生异常的语句
c;
}catch(Exception ex) {
d;
}fifinally {
e;
}
``当没有发生异常时的执行流程:``a b c e;
`<br />当发生异常时的执行流程:`a b d e;

Finaily的用法

image.png
image.png
在没有异常的情况下,执行流程和执行结果。

image.png
在有异常情况时的输出结果。
由此可见,无论是否有异常,finaily类里的执行语句都是会打印的。