Exception和Error有什么区别?

典型的回答是这样的:

    Exception 和 Error都继承了Throwable类,在java中只有Throwable类型的实例才可以被抛出(Throw)或者捕捉(catch),它是异常处理机制的基本组成类型。

   Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应的处理。

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

   Exception类又分为可检查异常(checked)和不检查异常(unchecked),可检查异常在源码里必须显示的进行捕获处理,这是编译期检查的一部分。

    不检查异常就是所谓的运行时异常,类似NullPointerException,ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误。

考点分析:

  分析Exception 和 Error的区别,是从概念角度考察了Java处理机制,总的来说,还处于理解层面,面试者只要阐述清楚就好。

在日常的编程中如何处理好异常呢?

  第一,理解Throwable,Exception,Error的设计和分类。比如,掌握应用广泛的子类,以及如何自定义异常,如下图:

    

有些子类需要重点理解下,比如NoClassDefFoundError 和 ClassNotFoundException有什么区别,这也是经典的题目。

第二,理解Java语言中操作Throwable的元素和实践。如try-catche-finally块,throw,throws关键字等,随着JAVA语言的发展,引入了更加便利的特性,比如try-with-resources和multiple catch。代码如下

    try(BufferedReader br = new BufferedReader(br)){

        }catch(Exception  | IOExcetion e){

        }

知识扩展:

  前面谈了很多概念性的东西,接下来结合一些代码用例进行分析。

        try {
            // 业务代码
            //
            Thread.sleep(1000L);
        } catch (Exception e) {
            //
        }

这段代码很短,但是已经违反了异常处理的两个基本原则。

第一,尽量不要捕获类似Exception这样的通用异常,而是应该捕获特定异常。

Thread.sleep(1000L);这段代码抛出的InterruptedException。第二,不要生吞异常生吞异常往往是基于假设这段代码可能不会发生,或者感觉忽略异常时无所谓的。来看第二段代码,如下
try {
            // 业务代码
            //
        } catch (IOException e) {
            e.printStackTrace();
        }

这段代码没有任何问题,但是不要这么处理。

我们从性能角度来审视JAVA的异常处理机制,有两个可能会相对昂贵的地方:

  • try-catch代码段会产生额外的性能开销,会影响JVM对代码进行优化,所以建议仅捕获有必要的代码,不要一个大try包住整段代码,不要用异常控制流程代码,很低效。
  • JAVA每实例化一个Exception,都会对当时的栈进行快照,这是一个相对比较重的操作,如果发生的非常频繁,这个开销可就不能被忽视了。
  • 不要推诿或者延迟处理异常,就地解决最好,并需要实实在在的进行处理,而不是只捕捉,不动作
  • 一个函数尽管抛出了多个异常,但是只有一个异常可被传播到调用端,最后被抛出的异常时唯一被调用端接收的异常,其他异常都会被吞没掩盖。如果调用端要知道造成失败的最初原因,程序中就不能掩盖异常

原文地址:https://www.cnblogs.com/zhjxtf/p/9355892.html

时间: 2024-08-03 21:41:52

Exception和Error有什么区别?的相关文章

Exception 和 Error 有什么区别么

声明 本篇所涉及的提问,正文的知识点,全都来自于杨晓峰的<Java核心技术36讲>,当然,我并不会全文照搬过来,毕竟这是付费的课程,应该会涉及到侵权之类的问题. 所以,本篇正文中的知识点,是我从课程中将知识点消耗后,用个人的理解.观念所表达出来的文字,参考了原文,但由于是个人理解,因此不保证观点完全正确,也不代表错误的观点是课程所表达的.如果这样仍旧还是侵权了,请告知,会将发表的文章删掉. 当然,如果你对此课程有兴趣,建议你自己也购买一下,新用户立减 30,微信扫码订阅时还可以返现 6 元,相

java中exception和error有什么区别,运行时异常和一般异常有什么区别

1.exception和error都是继承了throwable类,在java中只有throwable类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型 2.exception和error体现了java平台设计者对不同异常情况的分类.exception是程序正常运行中,可以预料的意外情况,并且应该被捕获,进行相应的处理 3.error是指在正常情况下,不大可能出现的情况,绝大部分的error都会导致程序(比如jvm自身)处于非正常的.不可恢复的状态.既然是非

第2讲 Exception和Error有什么区别?

原文地址:https://www.cnblogs.com/bmxm/p/11997462.html

Java Exception和Error的区别

Java中异常的抽象类是Throwable,在此基础上,派生出两大类:Error和Exception. Error是程序中的严重错误,不应该用try-catch包括.Javadoc的说明如下: An Error is a subclass of Throwable that indicates serious problems that a reasonable application should not try to catch. Most such errors are abnormal

异常:exception和error的区别

Throwable 是所有 Java 程序中错误处理的父类 ,有两种子类: Error 和 Exception . Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息. Exception :表示可恢复的例外,这是可捕捉到的. Java 提供了两类主要的异常 :runtime exception 和 checked exception . checked

Java的Exception和Error面试题10问10答

在Java核心知识的面试中,你总能碰到关于 处理Exception和Error的面试题.Exception处理是Java应用开发中一个非常重要的方面,也是编写强健而稳定的Java程序的关键,这自然使它成为面试题中的常客.关于Java中Error和Exception的面试题目多是关于Exception和Error的概念,如何处理Exception,以及 处理Exception时需要遵守的最佳实践等等.尽管关于多线程.垃圾回收.JVM概念和面向对象设计等方面的问题依然主宰着这类面试,你仍然需要为回答

Java-异常Throwable,Exception,Error

  异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等. 异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程. Java通过API中Throwable类的众多子类描述各种不同的异常.因而,Java异常都是对象,是Throwable子类的实例,描述了出现在一段编码中的 错误条件.当条件生成时,错误将引发异常. 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共

log.error(&quot;异常:&quot;, e);与log.error(e.getMessage());区别

转: log.error("异常:", e);与log.error(e.getMessage());区别 2017年04月28日 14:51:32 行走的soong 阅读数:12017 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/Soongp/article/details/70911198 昨天接到消息,要去海尔商城做一个CM系统,但是海尔那边还需做一下简单的面试,把把关.废话不多说,讨论问题: 不知道大家在正常的开发中,有没有细

软件测试作业2 — 软件测试中的错误Failure, Error, Fault的区别

软件测试中的错误Failure, Error, Fault的区别: Failure: External, incorrect behavior with respect to the requirements or other description of the expected behavior(预期行为出错或与其他的外部行为描述不符).指软件在运行时出现的功能的丧失,类似于看病时病人发病的症状. Fault: A static defect in the software(软件中的静态缺陷