7.3 Exception类与RuntimeException类

在Java面试中经常会询问Exception类与RuntimeException类的区别,如果要想理解这两个类的区别,请看以下代码。

【例7.14】字符串变为整型

上面将字符串变为整型的代码中,Integer因为开头首字母大写,所以肯定是一个类,而parseInt()方法可以直接由类名称调用,所以此方法肯定是一个静态方法,此方法定义如下:

上面的方法在声明时使用了throws关键字,但是在方法调用的时候并没有使用try…catch进行处理,这是为什么呢?下面观察一下NumberFormatException类的继承关系,如图7-7所示。

图7-7 继承关系

从图7-7中可以发现,NumberFormat-Exception属于RuntimException的子类,那么这个时候就可以清楚地知道了以下的一个概念:

(1)Exception在程序中必须使用try…catch进行处理。

(2)RuntimeException可以不使用try…catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。

提示

对于RuntimeException的子类最好也使用异常处理机制。

虽然RuntimeException的异常可以不用try…catch进行处理,但是如果出现异常,则肯定会导致程序中断执行,所以,为了保证程序在出错之后依然可以执行,在开发代码的时候最好也使用try…catch的异常处理机制进行处理。

常见面试题分析:请解释一下RuntimeException和Exception的区别?请列举出几个常见的RuntimeException。

(1)RuntimeException是Exception的子类;

(2)Exception定义了必须处理的异常,而RuntimeException定义的异常可以选择性地进行处理;

(3)常见的RuntimeException:NumberFormatException、ClassCastException、NullPointerException、ArithmeticException、ArrayIndexOutOfBoundsException。