Error和Exception的区别

参考答案

Error类和Exception类都继承自Throwable类。

Error的继承关系

java.lang.Object
Error和Exception的区别java.lang.Throwable
Error和Exception的区别java.lang.Error

Exception的继承关系

java.lang.Object
Error和Exception的区别java.lang.Throwable
Error和Exception的区别java.lang.Exception

一、概念不同

Error:程序无法处理的系统错误,编译器不做检查。

Exception:程序可以处理的异常,捕获后可能恢复。

前者是程序无法处理的错误,后者是可以处理的异常。

二、责任不同

Error:指正常情况下,不大可能出现的情况,绝大部分的Error都会导致程序(比如JVM自身)处于非正常状态,不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如OutOfMemoryError之类,都是Error的子类。

  1. 可以是可被控制(checked) 或不可控制的(unchecked);
  2. 表示一个由程序员导致的错误;
  3. 应该在应用程序级被处理。

Exception:是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。可划分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源码里必须显示的进行捕获处理,这里是编译期检查的一部分。

  1. 总是不可控制的(unchecked);
  2. 经常用来用于表示系统错误或低层资源的错误;
  3. 如何可能的话,应该在系统级被捕捉。

三、知识拓展

常见的Error和Exception

1.  RuntimeException

  1. NullPropagation:空指针异常
  2. ClassCastException:类型强制转换异常
  3. IllegalArgumentException:传递非法参数异常
  4. IndexOutOfBoundsException:下标越界异常
  5. NumberFormatException:数字格式异常

2.  非RuntimeException

  1. ClassNotFoundException:找不到指定class的异常
  2. IOException:IO操作异常

3.  Error

  1. NoClassDefFoundError:找不到class定义的异常
  2. StackOverflowError:深递归导致栈被耗尽而抛出的异常
  3. OutOfMemoryError:内存溢出异常

分析Exception和Error的区别,是从概念角度考察了java处理机制,仅处于理解的层面,面试时只要阐述清楚就可以了。

在日常编程中,如何处理好异常是比较考验功底的。我认为至少需要掌握以下两个方面:

第一,理解Throwable,Exception,Error的设计和分类,掌握日常应用最为广泛的子类,以及如何自定义异常等。很多面试官会进一步追问一些细节,比如,你了解哪些Error,Exception或者RuntimeException?面试时至少要心中有数,最好重点理解一些子类型。

第二,理解java语言中操作Throwable的元素和实践,熟练掌握最基本的语法,比如try-catch-finally块,throw,throws关键字等。同时,还要懂得如何处理典型场景。

以上,是Java面试题【Error和Exception的区别】的参考答案。

输出,是最好的学习方法

欢迎在评论区留下你的问题、笔记或知识点补充~

—end—

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧