Java 异常处理机制
在使用计算机语言进行项目开发的过程中,即使程序员把代码写得尽善尽美,在系统的运行过程中仍然会遇到一些问题,因为很多问题不是靠代码能够避免的,比如:客户输入数据的格式问题,读取文件是否存在,网络是否始终保持通畅等等。
异常:指的是程序在执行过程中,出现的非正常情况,如果不处理最终会导致 JVM 的非正常停止。
异常指的并不是语法错误和逻辑错误。语法错了,编译不通过,不会产生字节码文件,根本不能运行。 代码逻辑错误,只是没有得到想要的结果,例如:求 a 与 b 的和,你写成了 a-b
一、异常的抛出机制
Java 中是如何表示不同的异常情况,又是如何让程序员得知,并处理异常的呢? Java 中把不同的异常用不同的类表示,一旦发生某种异常,就创建该异常类型的对象,并且抛出 (throw)。然后程序员可以捕获 (catch) 到这个异常对象,并处理;如果没有捕获 (catch) 这个异常对象,那么这个异常对象将会导致程序终止。
举例:运行下面的程序,程序会产生一个数组角标越界异常 ArrayIndexOutOfBoundsException。我们通过图解来解析下异常产生和抛出的过程。
二、如何对待异常
对于程序出现的异常,一般有两种解决方法:一是遇到错误就终止程序的运行。另一种方法是程序员在编写程序时,就充分考虑到各种可能发生的异常和错误,极力预防和避免。实在无法避免的,要编写相应的代码进行异常的检测、以及 异常的处理,保证代码的健壮性。
三、异常的体系结构
3.1 Throwable
java.lang.Throwable:异常体系的父类 Throwable 中的常用方法:
- public void printStackTrace():打印异常的详细信息。包含了异常的类型、异常的原因、异常出现的位置、在开发和调试阶段都得使用 printStackTrace。
- public String getMessage():获取发生异常的原因。
3.2 Error 和 Exception
Throwable 可分为两类:Error 和 Exception。分别对应着 java.lang.Error 与 java.lang.Exception 两个类。
Error:Java 虚拟机无法解决的严重问题。如:JVM 系统内部错误、资源耗尽等严重情况。一般不编写针对性的代码进行处理。
- 例如:StackOverflowError(栈内存溢出) 和 OutOfMemoryError(堆内存溢出,简称 OOM)。
Exception:其它因编程错误或偶然的外在因素导致的一般性问题,需要使用针对性的代码进行处理,使程序继续运行。否则一旦发生异常,程序也会挂掉。例如:
- 空指针访问
- 试图读取不存在的文件
- 网络连接中断
- 数组角标越界
3.3 编译时异常和运行时异常




