Java中的异常(Exception):什么是异常?异常产生的原因及常见的几种异常类型

Java 中的异常(Exception)又称为例外,是一个在程序执行期间发生的事件,它中断正在执行程序的正常指令流。为了能够及时有效地处理程序中的运行错误,必须使用异常类。

异常产生的原因及使用原则

在 Java 中一个异常的产生,主要有如下三种原因:

Java 内部错误发生异常,Java 虚拟机产生的异常。
编写的程序代码中的错误所产生的异常,例如空指针异常、数组越界异常等。这种异常称为未检査的异常,一般需要在某些类中集中处理这些异常。
通过 throw 语句手动生成的异常,这种异常称为检査的异常,一般用来告知该方法的调用者一些必要的信息。
Java 通过面向对象的方法来处理异常。在一个方法的运行过程中,如果发生了异常,则这个方法会产生代表该异常的一个对象,并把它交给运行时的系统,运行时系统寻找相应的代码来处理这一异常。

我们把生成异常对象,并把它提交给运行时系统的过程称为拋出(throw)异常。运行时系统在方法的调用栈中查找,直到找到能够处理该类型异常的对象,这一个过程称为捕获(catch)异常。

Java 异常强制用户考虑程序的强健性和安全性。异常处理不应用来控制程序的正常流程,其主要作用是捕获程序在运行时发生的异常并进行相应处理。编写代码处理某个方法可能出现的异常,可遵循如下三个原则:

在当前方法声明中使用 try catch 语句捕获异常。
一个方法被覆盖时,覆盖它的方法必须拋出相同的异常或异常的子类。
如果父类抛出多个异常,则覆盖方法必须拋出那些异常的一个子集,而不能拋出新异常。

Throwable是所有异常的根,java.lang.Throwable
Error:错误,Java.lang.Error
Exception:异常,java.lang.Exception
Exception分为

CheckedException
RuntimeException
所有RuntimeException类及其子类的实例被称为Runtime异常,不属于该范畴的异常则被称为CheckedException。

检查异常:是指编译器要求必须处置的异常,即程序在运行时由于外界因素造成的一般性异常,具体如下:

java.lang.ClassNotFoundExeption:没有找到具有指定名称的类异常。
java.lang.FileNotFoundException:访问不存在的文件异常。
java.lang.IO Exception:操作文件时发生的异常。
java.sql.SQL Exception:操作数据库时发生的异常。

运行时异常:是指编译器不要求强制处置的异常。一般是指因设计或实现方式不当而导致的问题。也可以说,是程序员的原因导致的,是本来可以避免发生的情况。

NullPointerException: 空指针异常,一般出现于数组,空对象的变量和方法
ArrayIndexOutOfBoundsException: 数组越界异常
ArrayStoreException: 数据存储异常
NoClassDefFoundException: java运行时系统找不到所引用的类
ArithmeticException: 算数异常,一般在被除数是0中
ClassCastException: 类型转换异常
IllegalArgumentException: 非法参数异常
IllegalThreadStateException: 非法线程状态异常
NumberFormatException: 数据格式异常
OutOfMemoryException: 内存溢出异常
PatternSyntaxException: 正则异常

内容参考以下文章

https://blog.csdn.net/qq_30576089/article/details/103902956?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2

https://qinyingjie.blog.csdn.net/article/details/83759162?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_paycolumn_v3&utm_relevant_index=2

http://c.biancheng.net/view/1038.html