有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:

import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest {@Testpublic void testThrowables(){try {throw new Exception();} catch (Throwable t) {String ss = Throwables.getStackTraceAsString(t);System.out.println("ss:"+ss);Throwables.propagate(t);}}@Testpublic void call() throws IOException {try {throw new IOException();} catch (Throwable t) {Throwables.propagateIfInstanceOf(t, IOException.class);throw Throwables.propagate(t);}}
}

将检查异常转换成未检查异常,例如:

import java.io.InputStream;
import java.net.URL;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest {@Testpublic void testCheckException(){try {  URL url = new URL("http://ociweb.com");  final InputStream in = url.openStream();  // read from the input stream  in.close();  } catch (Throwable t) {  throw Throwables.propagate(t);  }  }
}

  传递异常的常用方法:

  1.RuntimeException propagate(Throwable):把throwable包装成RuntimeException,用该方法保证异常传递,抛出一个RuntimeException异常
  2.void propagateIfInstanceOf(Throwable, Class<X extends Exception>) throws X:当且仅当它是一个X的实例时,传递throwable
  3.void propagateIfPossible(Throwable):当且仅当它是一个RuntimeException和Error时,传递throwable
  4.void propagateIfPossible(Throwable, Class<X extends Throwable>) throws X:当且仅当它是一个RuntimeException和Error时,或者是一个X的实例时,传递throwable。

  使用实例:

import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest {    @Testpublic void testThrowables(){try {throw new Exception();} catch (Throwable t) {String ss = Throwables.getStackTraceAsString(t);System.out.println("ss:"+ss);Throwables.propagate(t);}}@Testpublic void call() throws IOException {try {throw new IOException();} catch (Throwable t) {Throwables.propagateIfInstanceOf(t, IOException.class);throw Throwables.propagate(t);}}public Void testPropagateIfPossible() throws Exception {try {throw new Exception();} catch (Throwable t) {Throwables.propagateIfPossible(t, Exception.class);Throwables.propagate(t);}return null;}
}

  Guava的异常链处理方法:

  1.Throwable getRootCause(Throwable)
  2.List<Throwable> getCausalChain(Throwable)
  3.String getStackTraceAsString(Throwable)

Guava学习笔记(五):简化异常处理的Throwables类相关推荐

  1. Guava学习笔记:简化异常处理的Throwables类

    Guava学习笔记:简化异常处理的Throwables类 参考文章: (1)Guava学习笔记:简化异常处理的Throwables类 (2)https://www.cnblogs.com/peida/ ...

  2. Struts2学习笔记(五)之异常处理机制

    我们在知道在软件开发中的异常处理是很重要的,作为成熟的MVC框架的Struts2也提供了异常处理处理机制,对于一场处理:用户发送请求-->Action控制器-->发现相应的异常--> ...

  3. 【转】【C++学习笔记】C++异常处理

    转自:[C++学习笔记]C++异常处理!你绝对不能错过的干货! - 知乎 合理地使用C++异常处理,能够使我们写出来的程序更加稳定强健,不易崩溃.那么,应该如何使用C++异常处理呢?下面,我们就来向大 ...

  4. python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用

    本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...

  5. Ethernet/IP 学习笔记五

    Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...

  6. StackExchange.Redis学习笔记(五) 发布和订阅

    StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...

  7. 吴恩达《机器学习》学习笔记五——逻辑回归

    吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...

  8. 好程序员教程分析Vue学习笔记五

    好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...

  9. 【AngularJs学习笔记五】AngularJS从构建项目开始

    为什么80%的码农都做不了架构师?>>>    #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...

  10. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

最新文章

  1. Internet Explorer 9.0 正式版试用一点小总结
  2. Machine Learning Yearning book draft - 读记(前14章)
  3. 计算机网络物理层知识要点:通信基础、传输介质和设备
  4. OpenTLD 未完成 - 虎头
  5. WinSCP断线,WinSCP总是断线,断线重连过程又需要卡很长时间解决办法
  6. 怎么重新启动协议服务器,如何启用或禁用服务器网络协议 (SQL Server PowerShell)
  7. 关于计算机犯罪的英语作文,关于信息安全的英语作文范文
  8. ElasticSearch全文搜索引擎之Restful API和索引操作篇
  9. 科技爱好者周刊:第 78 期
  10. Blender物理引擎
  11. 微信公众号实现消息模板的推送
  12. JS事件之事件类型[鼠标和滚轮事件]
  13. 证件照怎么制作?怎样自己在线制作2寸照片?
  14. linux 脚本里切换用户密码,shell,切换用户,执行指定,脚本
  15. deep learning 入门
  16. python实现抢票github_面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍...
  17. QMUI-Android的一些尝试(圆形进度条、Loading、圆形图片、圆形按钮、椭圆图片)
  18. Python的一个图片识别工具-PyTesseract(Win10)
  19. SQL语言的四大功能
  20. 2015年江苏省信息与未来小学生编程思维展示活动试题--加数

热门文章

  1. css3中旋转坐标轴的问题
  2. 应用安全 - 操作系统安全 - Linux系统加固
  3. 25. object类中的一些方法分析
  4. 第七章读书笔记《深入理解计算机系统》
  5. 二叉树的非递归遍历(转载)
  6. 在Mac OS X中配置Apache + PHP + MySQL 很详细
  7. 身为程序员的我们......
  8. Publish over FTP发布报错
  9. Address already in use: bind 端口被占用的解决办法
  10. 理解Java - 线程池