Java中异常体系

Java中的异常体系


Throwable,是一个类,表示可抛出的,它是所有的异常都继承的类。

Throwable的子类,又分为两种,一种是Error,另一种是Exception。

Error一般不是应用程序抛出的,而是Java虚拟机抛出的,应用不需要管。

Exception是应用程序抛出来的,又分为两种,一种是Checked Exception,另一种是Unchecked Exception,Unchecked Exception主要是Runtime Exception,就是运行时异常。

Checked的含义是检查,主要指的是Javac这个编译器的检查,Javac编译器检查出来的异常都叫Checked Exception(受检异常,这里的受检,主要的含义是受Javac这个编译器的检查),所以受检异常是编译器肯定会检查出来的,所以应用必须得要Catch这个异常,否则应用无法通过编译,因此,受检异常都是必须要处理的异常。

Unchecked Exception,就是除Checked Exception之外的Exception,主要是Runtime Exception,就是应用运行的过程中抛出来的异常,因为是运行过程中抛出来的,所以一定是Java虚拟机抛出来的,因为应用是Jvm去运行的嘛。那些都是运行时异常呢?比如,下面的这个异常ArithmeticException:

Exception in thread "main" java.lang.ArithmeticException: / by zero

at HelloWorld.main(HelloWorld.java:9)

再比如:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at HelloWorld.main(HelloWorld.java:13)

为什么这些异常是运行时异常呢?因为除0异常是除法操作中的除数为0的时候才会抛出来,而除法的语法要求两边只要都是数字类型就好了,至于是否除数是0在编译的时候无法检查到,只能在运行的时候发现。对于数组下标越界异常也是同样的道理,语法只要求数组下标必须是整型,无法知道这个整型数是0、整数、还是负数,所以只能通过运行来发现。

猜你喜欢

转载自www.cnblogs.com/zhangzl419/p/10549616.html