• 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html
  • 极客专栏正式上线!欢迎访问 https://www.jikewenku.com/topic.html

Exception与Error

技术杂谈 勤劳的小蚂蚁 3个月前 (02-09) 80次浏览 已收录 0个评论 扫描二维码

关于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看一下)

丨极客文库, 版权所有丨如未注明 , 均为原创丨
本网站采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行授权
转载请注明原文链接:Exception与Error
喜欢 (0)
[247507792@qq.com]
分享 (0)
勤劳的小蚂蚁
关于作者:
温馨提示:本文来源于网络,转载文章皆标明了出处,如果您发现侵权文章,请及时向站长反馈删除。

您必须 登录 才能发表评论!

  • 精品技术教程
  • 编程资源分享
  • 问答交流社区
  • 极客文库知识库

客服QQ


QQ:2248886839


工作时间:09:00-23:00