什么是异常
从宏观的角度来理解,任何编程语言在程序运行过程中都会多多少少的出现不正常运行的情况,这个情况就是没有按照开发人员正常的逻辑来执行代码从而得到预期的结果。细分到具体的编程语言中,对于程序的这种不正常运行状况可以起一个好听的名字,在 Java 中,叫做异常。
Java 中程序没有正确执行时候的分类
既然程序出现了异常,那么异常可以怎么分类呢?合理的分类对于理解以及解决异常都有十分大的帮助。
Java 的发明者将这种程序不正确的运行分为下面的几种类型
从图中来看,这种程序的不正确执行从 Throwable 类下来分为异常以及错误。
这种分类是从 JDK 源代码中类的继承关系得到的,仅供参考。
Exception(程序运行不正常内部因素)
异常在 Java 中分为:受检异常和非受检异常;与此同时要和可以叫做编译时异常以及运行时异常;
为什么叫做编译时异常? 因为这个异常需要在 Java 代码编译之前,开发人员借助 IDE 或者其他的开发工具发现这种异常,将这种异常处理掉之后,程序才能编译,后续进行解释执行。
为什么叫做运行时异常? 运行时异常这种程序的不正确执行通常是代码在运行过程中由于逻辑问题而产生的,在前期较难的发现,也不能及时的处理掉,所以只有在程序运行的时候,才能看出来有没有出现不正确的运行行为。
受检异常以及非受检异常的简单区分
那些容易发现的错误,通常是受检异常;不太容易发现的,由于逻辑错误引发的异常,通常是非受检异常,也就是运行时异常。
比如:FileNotFoundException ,文件找不着是很容容易发生的,预测这种出错的行为,及时的做出处理,所以是一个受检异常(编译时异常)。
空指针异常:可能程序运行过程复杂调用链中的某一个环节出现了问题,不容易发现,只有程序运行起来的时候,才会注意到。
Error(程序运行不正常外部因素)
错误,是开发人员处理不了的程序运行问题,这个问题通常也不是开发人员引起的。是不可控的,常见的有 JVM OOM 虚拟机异常等。
小结
本文从作者自己的理解尝试解释了对于 Java 异常的讲解,希望有所帮助。