关于exception error java基础

1关于throwable

简单介绍.png

参考上面的这个图,throwable是父类,包括error和exception,

错误: Error类以及它的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理,Error很少出现。因此,程序员应该关注Exception为父类的分支下的各种异常类。

异常: Exception以及它的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,是异常处理的核心。

但是javac,也就是在编译阶段能够被检测出来的,叫检查性异常(checked exception).那另外一种叫unchecked exception.
Error 和 RuntimeException 以及子类。javac在编译时,不会提示和发现这样的异常,我们可以编写代码处理(使用try…catch…finally)这样的异常,也可以不处理。对于这些异常,我们应该修正代码,而不是去通过异常处理器处理 。这样的异常发生的原因多半是代码写的有问题。如除0错误ArithmeticException,错误的强制类型转换错误ClassCastException,数组索引越界ArrayIndexOutOfBoundsException,使用了空对象NullPointerException等等。

Java 根据各个类库也定义了一些其他的异常,下面的表中列出了 Java 的非检查性异常。

异常 描述

非检查性异常(unckecked exception):

- ArithmeticException   当出现异常的运算条件时,抛出此异常。例如,一个整数"除以零"时,抛出此类的一个实例。
- ArrayIndexOutOfBoundsException    用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
- ArrayStoreException   试图将错误类型的对象存储到一个对象数组时抛出的异常。
- ClassCastException    当试图将对象强制转换为不是实例的子类时,抛出该异常。
- IllegalArgumentException  抛出的异常表明向方法传递了一个不合法或不正确的参数。
- IllegalMonitorStateException  抛出的异常表明某一线程已经试图等待对象的监视器,或者试图通知其他正在等待对象的监视器而本身没有指定监视器的线程。
- IllegalStateException 在非法或不适当的时间调用方法时产生的信号。换句话说,即 Java 环境或 Java 应用程序没有处于请求操作所要求的适当状态下。
- IllegalThreadStateException   线程没有处于请求操作所要求的适当状态时抛出的异常。
- IndexOutOfBoundsException 指示某排序索引(例如对数组、字符串或向量的排序)超出范围时抛出。
- NegativeArraySizeException    如果应用程序试图创建大小为负的数组,则抛出该异常。
- NullPointerException  当应用程序试图在需要对象的地方使用 null 时,抛出该异常
- NumberFormatException 当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常。
- SecurityException 由安全管理器抛出的异常,指示存在安全侵犯。
- StringIndexOutOfBoundsException   此异常由 String 方法抛出,指示索引或者为负,或者超出字符串的大小。
- UnsupportedOperationException 当不支持请求的操作时,抛出该异常。

检查性异常(checked exception):

除了Error 和 RuntimeException的其它异常。javac强制要求程序员为这样的异常做预备处理工作(使用try…catch…finally或者throws)。在方法中要么用try-catch语句捕获它并处理,要么用throws子句声明抛出它,否则编译不会通过。这样的异常一般是由程序的运行环境导致的。因为程序可能被运行在各种未知的环境下,而程序员无法干预用户如何使用他编写的程序,于是程序员就应该为这样的异常时刻准备着。如SQLException , IOException,ClassNotFoundException 等。

下面的表中列出了 Java 定义在 java.lang 包中的检查性异常类。

ClassNotFoundException  应用程序试图加载类时,找不到相应的类,抛出该异常。
CloneNotSupportedException  当调用 Object 类中的 clone 方法克隆对象,但该对象的类无法实现 Cloneable 接口时,抛出该异常。
IllegalAccessException  拒绝访问一个类的时候,抛出该异常。
InstantiationException  当试图使用 Class 类中的 newInstance 方法创建一个类的实例,而指定的类对象因为是一个接口或是一个抽象类而无法实例化时,抛出该异常。
InterruptedException    一个线程被另一个线程中断,抛出该异常。
NoSuchFieldException    请求的变量不存在
NoSuchMethodException   请求的方法不存在

spring事务回滚与异常

一般情况下spring默认的是@Transation ,假如rollbackFor我们不指定默认的uncheckedException.会发生事务回滚。

但是如果rollbackFor指定了需要回滚的异常,比如自定义异常,那么回滚的时候只会混滚该类型的异常以及该异常子类的异常。所以使用时需要特别注意。

你可能感兴趣的:(关于exception error java基础)