JAVA的异常机制

Java中的Exception异常

public class Exception extends Throwable
Exception类及其子类是Throwable的一种形式,它指出了合理的应用程序想要捕获的条件。

public class RuntimeException extends Exception
RuntimeException是那些可能在JVM正常运行期间抛出的异常的超类。
可能在执行期间抛出的但未被捕获的RuntimeException的任何子类都无需在throws子句中进行声明。

Java的异常体系

JAVA的异常机制_第1张图片
653561-92338ff5fe9dd644.png

Java的异常体系规定了所有的异常都是继承自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

你可能感兴趣的:(JAVA的异常机制)