Exception处理

1 原则


   如果被调用方显示的向上Throw了Exception , 那么调用方【必须显示地处理】Exception(向上Throw或者Try...Catch);


  Exception处理_第1张图片


2 避免异常堆栈信息被吞掉


   如果被调用方Try...Catch了Exception,但没有打印Exception堆栈信息;而此时调用方也无法获得Exception的信息,那么【Exception堆栈就被吞掉了】。


  Exception处理_第2张图片

 

3 被调用方只要CatchException 就可以随时打印异常的堆栈信息,但是调用方想拿到异常的信息一般有如下两种方式:


  方式一、被调用方、调用方都需要处理异常

      此时,需要被调用方catch住Exception并处理,然后在catch模块里面再向上Throw这个Exception对象e;然后调用方再catch住这个Exception对象e,并处理。

 

  Exception处理_第3张图片


  方式二、被调用方不需要处理异常、调用方需要处理异常

       此时,被调用方不需catch Exception,只需要向上Throw Exception即可,调用方直接catch Exception即可。


  Exception处理_第4张图片


4 被调用方异常处理后返回值处理


  Exception处理_第5张图片

5 总结


  1、如果“被调用方”和“调用方”在同一个项目中(并且部署在同一台机器上),那么建议一方打印Exception即可(避免打印重复的日志)。

  2、如果“被调用方”和“调用方”在同的项目中,或者部署在不通的机器上(例如分布式项目的api&service),那么建议双方都需要打印异常,方法如下:

  首先,被调用方:首先,要在方法声明上显示地Throw Exception,其次要try...catchException 并在catch里面log.error(e.getMessage,e);和手动向上跑出异常throw new Exception(e);

  其次,调用方  :try...cacheException 并log.error(e.getMessage,e);

你可能感兴趣的:(【Java综合】)