Java中的Exception异常
public class Exception extends Throwable
Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。
public class RuntimeException extends Exception
RuntimeException是那些可能在JVM正常运行期间抛出的异常的超类。
可能在执行期间抛出的但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。
Java的异常体系
653561-92338ff5fe9dd644.pngJava的异常体系规定了所有的异常都是继承自Throwable;
直接继承自Throwable的有两大类:
-
Error:一般来说,Error类型的异常是不应该被捕获的,这类似错误一般都是严重的系统错误,在Java中默认约定Error类型是交给虚拟机处理的。所以一般情况下,都不应该捕获Error类型的异常。
-
Exception:Exception分为两种,一种是继承自RuntimeException的类,比如NullPointerException、IndexOutOfBoundsException等,这类异常叫做非检测异常(unchecked exception),另外一种是继承自Exception(但是没有同时又继承自RuntimeException)的类,比如常见的IOException,这类异常是受检测异常(checked exception),受监测异常和前者的明显区别是在语法上要么用try-catch捕获要么抛出要么重新throw,
Exception的分类:
1.非运行时异常(Checked Exception)
Java中凡是继承自Exception但不是继承自RuntimeException的类都是非运行时异常;这种检查类型的异常就是说要程序员明确的去声明或者用try..catch语句去处理异常;
2.运行时异常(RuntimeException/Unchecked Exception)
RuntimeException类直接继承自Exception类,称为运行时异常。Java中所有的运行时异常都是直接或间接的继承自RuntimeException。
JAVA中的所有异常类都直接或者间接继承自Exception。
异常使用时需注意的几个点:
- 当使用多个catch语句块来捕获异常时,需要将父类的catch语句块放到子类型的catch块之后,这样才能保证后续的catch可能会被执行到
- 如果try代码块之中存在return语句,那么首先会执行finally语句块中的代码,然后返回
- 如果try代码块之中存在
System.exit(0)
语句,那就永远不会执行finally语句块的代码了;因为Sysytem.exit(0)
会终止当前运行的JVM。
参考文章:
http://www.jianshu.com/p/e7b55c8bd456
http://www.cnblogs.com/octobershiner/archive/2012/12/20/2827120.html
网友评论