在使用计算机语言进行项目开发的过程中,即使程序员把代码写的尽善尽美,在系统运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:用户输入数据的格式,读取文件是否存在,网络是否保持通畅等。

在编写程序时,经常要在可能出现错误的地方加上检测的代码,如进行 x / y 运算时,要检测分母为 0,数据为空,输入的不是数据而是字符等。因此,编程语言通常都会有异常处理机制应对这种情况。

捕获错误最理想的是编译期间,但有的错误只有在运行时才会发生。比如:除数为 0,数组下标越界等。

异常分类

执行过程中所发生的异常事件分类有两种

1)Error

Java 虚拟机无法解决的严重问题。如:JVM 系统的内部错误、资源耗尽等严重情况。比如 StackOverflowError (栈溢出) 和 OOM( out of memory),Error 是严重错误,程序会崩溃。

2)Exception

其他因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如:空指针访问、试图读取不存在的文件,网络连接中断等,Exception 分为两大类:运行时 Exception 和编译时 Exception 。

image.png

异常体系图

image.pngimage.png

  • 异常分为两大类,运行时异常和编译时异常
  • 编译器不要求强制处理运行时异常,一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException 类及它的子类都是运行时异常
  • 对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响
  • 编译时异常,是编译器要求必须处理的异常

常见的运行时异常

1)NullPointException 空指针异常
2)ArithmeticException 数学运算异常
3)ArrayIndexOutOfBoundsException 数组下标越界异常
4)ClassCastException 类型转换异常
5)NumberFormatException 数字格式不正确异常

常见的编译异常

  • SQLException:操作数据库时,查询表可能发生异常
  • IOException:操作文件时,发生的异常
  • FileNotFoundException:当操作一个不存在的文件时,发生异常
  • ClassNotFoundException:加载类,而该类不存在时,异常
  • EOFException:操作文件时,到文件末尾,发生异常
  • IllegalArguementException:参数异常

异常处理机制

1)try - catch - finally
程序员在代码中捕获发生的异常,自行处理

2)throws
将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是 JVM 。