• 面试刷题2:Exception和Error的区别?


    image.png

    世界上不存在永远不出错的程序。可靠的程序必须处理好意外情况。
    java的异常处理机制降低了编写可靠程序的门槛。
    当系统运行变慢,排查发生最频繁的Excetion可以作为一种调优手段。
    那么: Exception和Error有什么区别?

    我是李福春,我在准备面试。
    通过本篇,你可以学到下图的知识点。

    image.png

    Java异常的类层级

    image.png

    在java体系中,Excetion和Error的关系如上,常见的子类也可见12;

    Exception VS Error

    先分开介绍:

    Exception: 可以预见到的异常情况,应该被捕获或者处理,在java中,分为检查异常(编译期)和不检查异常(运行期)。

    Error: 出现了错误系统不能正常运行或者恢复,一般情况不容易发生;

    然后说共同点:都继承自Throwable,在java中至于Throwable的子类可以被Catch或者Throw;

    try-catch-finally

    java提供的异常处理语法。

    随着java的发展,有更高级的语法优化。

    try-with-resource :  自动关闭资源
    multile exception: 相同种类的异常集中处理

    代码如下:

    
    try (BufferedReader br = new BufferedReader(…);
         BufferedWriter writer = new BufferedWriter(…)) {// Try-with-resources
    // do something
    catch ( IOException | XEception e) {// Multiple catch
       // Handle it
    } 
    

    在处理异常的时候,有4个基本规则需要注意:

    1. 不要catch 最普遍的Exception ,而应该优先捕获具体的异常,可以留下足够的诊断信息;
    2. 不要生吞异常,应该尝试抛出或者写到日志,否则无法判断异常发生的位置;
    3. 不要使用e.printStackTrace(),在分布式系统中,无法确定输出到了什么位置,应该输出到日志中;
    4. 提早抛出,晚点捕获;提高效率;

    自定义异常

    自定义异常的时候需要注意两点:
    1,尽量不要定义检查异常
    2,异常需要保留足够的诊断信息,但是也需要脱敏;

    异常影响性能

    主要两个原因:

    1. try-catch语句会影响jvm对代码的优化,所以应该只包含必要的代码段;
    2. 每次实例化一次Exception,jvm对线程栈进行一次快照,这是一个比较重的操作,非常耗费资源;

    原创不易,转载请注明出处。

  • 相关阅读:
    yii框架源码分析之Yii::createWebApplication()>run() 执行过程分析
    PHP的范围解析操作符(::)的涵义
    数据结构&算法(PHP描述) 三元组 Triplet
    解决远程连接mysql很慢的问题(mysql_connect 打开连接慢)
    第4章 数据处理数组的处理郑阿奇
    PHP相似函数整理2 array_flip() 、array_reverse()
    OS + Linux Disk disk lvm / disk partition / disk mount / disk io
    my read_Country
    OS + Linux File nfs / samba / rsync / inotify / smb / webdav
    Unix + OS IBM Aix Disk disk lvm / disk partition / disk mount / disk mon / File
  • 原文地址:https://www.cnblogs.com/snidget/p/12558681.html
Copyright © 2020-2023  润新知