zoukankan      html  css  js  c++  java
  • 异常链

    场景:testone抛出一个异常,testtwo接受到testone的异常后抛出一个新异常,testthree接收到testtwo的异常后再抛出一个新异常

    代码如下:

    package com.mpp.test;
    
    public class TryDemoFive {
        public static void main(String[] args) {
            try{
                testTree();
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
        public static void testOne() throws HotelAgeException{
            throw  new HotelAgeException();
        }
    
        public static void testTwo() throws Exception{
            try {
                testOne();
            }catch (HotelAgeException e){
                throw new Exception("我是新产生的异常1");
            }
        }
    
        public static void testTree() throws Exception{
            try {
                testTwo();
            }catch (Exception e){
                throw new Exception("我是新产生的异常2");
            }
        }
    }

    运行结果只显示最后一个异常,造成异常的丢失

    解决异常链路抛出过程中丢失异常信息的问题:

    修改后的代码:

    package com.mpp.test;
    
    public class TryDemoFive {
        public static void main(String[] args) {
            try{
                testTree();
            }catch (Exception e){
                e.printStackTrace();
            }
    
        }
    
        public static void testOne() throws HotelAgeException{
            throw  new HotelAgeException();
        }
    
        public static void testTwo() throws Exception{
            try {
                testOne();
            }catch (HotelAgeException e){
                throw new Exception("我是新产生的异常1",e);  //把testone中捕获的异常参数,加进来
            }
        }
    
        public static void testTree() throws Exception{
            try {
                testTwo();
            }catch (Exception e){
                Exception e1 = new Exception("我是新产生的异常2"); //新建一个异常对象
                e1.initCause(e);   //把testttwo中的异常加进来
                throw e1; //抛出异常
    //            throw new Exception("我是新产生的异常2");
    
            }
        }
    }

    修改后的运行结果:

    总结:

  • 相关阅读:
    5.Spring高级装配(根据profile的激活状态决定使用的环境) 以及 条件化 Bean
    4.SpringJunit4ClassRunner
    3.Spring配置可选方案
    2.Spring容器bean的生命周期
    1.使用spring上下文容纳你的Bean
    maven 打包跳过 Junit test
    HTML5中meta name="viewport"
    二、JavaScript this
    VIM_插件
    VBS_DO...Loop
  • 原文地址:https://www.cnblogs.com/mpp0905/p/10367599.html
Copyright © 2011-2022 走看看