Exception与Error

关于Java中异常处理部分,面试时经常会被问到 「Exception与Error有什么区别?」,建议重点关注。

Exception与Error有什么区别?

问题分析:既然问到两者的区别,说明两者是有必然联系的,故简单从两者的联系说起,重点突出两者的区别,最后可选择性的介绍Exception的体系结构。
参考答案:
联系:Exception和Error都继承于Throwable类,在Java中只有Throwable类的实例才可被抛出或者捕获,故可将Throwable类看做Java中异常与错误处理的核心。
区别:Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题,比如内存溢出,不可能指望程序能处理这样的情况。而Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
常见的Error主要包括:
  • OutOfMemoryError:内存溢出错误
  • StackOverflowError:栈溢出错误
  • VirtualMachineError:虚拟机错误
  • NoClassDefFoundError:找不到类错误
PS:关于Exception的体系结构见下一问题。

谈谈你对Java中Exception类的理解?

问题分析:主要从编译时异常和运行时异常两个方面进行解释。
参考答案:
Exception类作为Java中异常处理机制的基本组成类型,其主要分为编译时异常和运行时异常。
编译时异常也叫可检查异常,指编译器要求必须处置的异常,即编译时异常不是说有异常才处理,而是在编译前对可能出现的异常隐患进行提示并要求处理。
运行时异常也叫不检查异常,指编译器不要求强制处置的异常,因为这类异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。
总而言之,对于运行时异常来说,可以不显式地进行处理;而对于编译时异常来说,必须要显式地进行处理。

常见的运行时异常有哪些?

参考答案:
  • ArithmeticException(算术异常)
  • ClassCastException (类转换异常)
  • IllegalArgumentException (非法参数异常)
  • IndexOutOfBoundsException (下标越界异常)
  • NullPointerException (空指针异常)
  • SecurityException (安全异常)

扩展面试题

问:如下代码块的返回值是什么?
public static int WithException() {
    int i = 10;
    try {
        i = i / 0;
        return –i;
    } catch (Exception e) {
        –i;
        return –i;
    } finally {
        –i;
        return –i;
    }
}
答:6。因为finally代码块的存在,try和catch中的return语句不会立马返回调用者,而是记录下返回值待finally代码块执行完毕之后再向调用者返回其值,但由于finally中有return语句,故直接从finally代码块中直接返回。(不太好理解,大家可以debug看一下)
本站所有文章均来自互联网,如有侵权,请联系站长删除。极客文库 » Exception与Error
分享到:
赞(0)

评论抢沙发

评论前必须登录!