• 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 使用 Micrometer 集成 Prometheus 监控 Java 应用性能
    Prometheus 通过 consul 实现自动服务发现
    Prometheus 通过 consul 分布式集群实现自动服务发现
    使用 PushGateway 进行数据上报采集
    AlertManager 之微信告警模板,UTC时间错8个小时的解决办法
    Prometheus 监控报警系统 AlertManager 之邮件告警
    Elasticsearch:使用 IP 过滤器限制连接
    Elasticsearch:创建 API key 接口访问 Elasticsearch
    Elasticsearch:反向代理及负载均衡在 Elasticsearch 中的应用
    Kibana:如何周期性地为 Dashboard 生成 PDF Report
  • 原文地址:https://www.cnblogs.com/tsruixi/p/11767896.html
Copyright © 2020-2023  润新知