zoukankan      html  css  js  c++  java
  • 19.10.23

    //1.Java的异常
    异常继承自throwable异常根体系
    它有两个体系,一个是error一个是Execption
    Exception又分为两大类:
    RuntimeException以及它的子类;
    非RuntimeException(包括IOException、ReflectiveOperationException等等)
    
    Java规定:
    必须捕获的异常,包括Exception及其子类,但不包括RuntimeException及其子类,
    这种类型的异常称为Checked Exception。
    不需要捕获的异常,包括Error及其子类,RuntimeException及其子类。
    
    //2.异常捕获
    同时,如果异常处理语句相同,可以放到一个catch下
    如:
    catch(IOException | RuntimeException){
        ......
    }
    使用try ... catch ... finally时:
    多个catch语句的匹配顺序非常重要,子类必须放在前面;
    finally语句保证了有无异常都会执行,它是可选的;
    一个catch语句也可以匹配多个非继承关系的异常
    
    //3.抛出异常
    当某个方法抛出异常时,如果当前方法没有捕获异常,就会往上一层传播直到被捕获
    即直到遇见try....catch
    
    如何抛出异常
    <1>创建一个Exception的实例
    <2>用throw语句抛出
    
    因此,在catch中抛出异常,不会影响finally的执行。JVM会先执行finally,然后抛出异常。
    异常屏蔽
    如果在执行finally语句时抛出异常,那么catch中的异常就不会抛出了
    在极少数情况下我们需要获知所有的异常,
    方法是先用origin变量保存原始异常,然后调用Throwable.addSuppressed(),
    把原始异常添加进来,最后在finally抛出:
    public class Main {
        public static void main(String[] args) throws Exception {
            Exception origin = null;
            try {
                System.out.println(Integer.parseInt("abc"));
            } catch (Exception e) {
                origin = e;
                throw e;
            } finally {
                Exception e = new IllegalArgumentException();
                if (origin != null) {
                    e.addSuppressed(origin);
                }
                throw e;
            }
        }
    }
    通过Throwable.getSuppressed()可以获取所有的Suppressed Exception。
    绝大多数情况下,在finally中不要抛出异常。
    因此,我们通常不需要关心Suppressed Exception。
    
    作者:睿晞
    身处这个阶段的时候,一定要好好珍惜,这是我们唯一能做的,求学,钻研,为人,处事,交友……无一不是如此。
    劝君莫惜金缕衣,劝君惜取少年时。花开堪折直须折,莫待无花空折枝。
    曾有一个业界大牛说过这样一段话,送给大家:   “华人在计算机视觉领域的研究水平越来越高,这是非常振奋人心的事。我们中国错过了工业革命,错过了电气革命,信息革命也只是跟随状态。但人工智能的革命,我们跟世界上的领先国家是并肩往前跑的。能身处这个时代浪潮之中,做一番伟大的事业,经常激动的夜不能寐。”
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
  • 相关阅读:
    spring boot-17.RabbitMQ
    spring boot-16.使用redis做缓存
    spring boot-15.缓存
    spring boot-14.集成MyBatis
    spring boot-13.数据访问
    docker 安装完mysql 后客户端无法访问
    【python】string functions
    【转】澄清P问题、NP问题、NPC问题
    ubuntu中使用gensim+word2vec[备忘]
    ubuntu熟悉过程中遇到一些小问题记录一下
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11767896.html
Copyright © 2011-2022 走看看