转自:http://www.2cto.com/kf/201109/104708.html
Java 中异常的分类
所有异常,都继承自 java.lang.Throwable 类。
Throwable 有两个直接子类, Error 类和 Exception 类。
Exception
Exception 则可使从任何标准 Java 库的类方法,自己的方法以及运行时任何异常中抛出来的基类型。
异常可分为执行异常( RuntimeException )和检查异常( Checked Exceptions )两种
RuntimeException
RuntimeException 在默认情况下会得到自动处理。所以通常用不着捕获 RuntimeException ,但在自己的封装里,也许仍然要选择抛出一部分 RuntimeException 。
RuntimeException
是那些可能在 Java 虚拟机正常运行期间抛出的异常的超类。可能在执行方法期间抛出但未被捕获的 RuntimeException
的任何子类都无需 在 throws
子句中进行声明。( java api )
它是 uncheckedExcepiton 。
Java.lang.ArithmeticException
Java.lang.ArrayStoreExcetpion
Java.lang.ClassCastException
Java.lang.EnumConstantNotPresentException
Java.lang.IllegalArgumentException
Java.lang.IllegalThreadStateException
Java.lang.NumberFormatException
Java.lang.IllegalMonitorStateException
Java.lang.IllegalStateException
Java.lang.IndexOutOfBoundsException
Java.lang.ArrayIndexOutOfBoundsException
Java.lang.StringIndexOutOfBoundsException
Java.lang.NegativeArraySizeException’
Java.lang.NullPointerException
Java.lang.SecurityException
Java.lang.TypeNotPresentException
Java.lang.UnsupprotedOperationException
CheckedException
除了 runtimeException 以外的异常,都属于 checkedException ,它们都在 java.lang 库内部定义。 Java 编译器要求程序必须捕获或声明抛出这种异常。
一个方法必须通过 throws 语句在方法的声明部分说明它可能抛出但并未捕获的所有 checkedException 。
Java.lang.ClassNotFoundException
Java.lang.CloneNotSupportedException
Java.lang.IllegalAccessException
Java.lang.InterruptedException
Java.lang.NoSuchFieldException
Java.lang.NoSuchMetodException
Error
当程序发生不可控这种错误时,通常的做法是通知用户并中止程序的执行。
与异常不同的是 Error 及其子类的对象不应被抛出。
Error 是 Throwable 的子类,代表编译时间和系统错误,用于指示合理的应用程序 不应该试图捕获 的严重问题。大多数这样的错误都是异常条件。虽然 ThreadDeath 错误是一个 “ 正规 ” 的条件,但它也是 Error 的子类,因为大多数应用程序都不应该试图捕获它。
在执行该方法期间, 无需在其 throws 子句中声明可能抛出但是未能捕获 的 Error 的任何子类,因为这些错误可能是再也不会发生的异常条件。
它是 uncheckedExcepiton 。