简化异常处理的Throwables类
简化异常处理的Throwables类
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:
import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables;
public class ThrowablesTest {
@Test
public void testThrowables(){
try {
throw new Exception();
} catch (Throwable t) {
String ss = Throwables.getStackTraceAsString(t);
System.out.println("ss:"+ss);
Throwables.propagate(t);
}
}
@Test
public 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 {
@Test
public 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 {
@Test
public void testThrowables(){
try {
throw new Exception();
} catch (Throwable t) {
String ss = Throwables.getStackTraceAsString(t);
System.out.println("ss:"+ss);
Throwables.propagate(t);
}
}
@Test
public 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)
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:

import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables; public class ThrowablesTest { @Test
public void testThrowables(){
try {
throw new Exception();
} catch (Throwable t) {
String ss = Throwables.getStackTraceAsString(t);
System.out.println("ss:"+ss);
Throwables.propagate(t);
}
} @Test
public 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 { @Test
public 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 {
@Test
public void testThrowables(){
try {
throw new Exception();
} catch (Throwable t) {
String ss = Throwables.getStackTraceAsString(t);
System.out.println("ss:"+ss);
Throwables.propagate(t);
}
} @Test
public 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)
简化异常处理的Throwables类的更多相关文章
- Guava学习笔记:简化异常处理的Throwables类
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中.Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常.例如: import java.io.IOE ...
- JAVA异常处理、常用类、反射、集合
异常 异常:在Java中是指被一个方法抛出的对象. 分类:检查异常.运行时异常.错误 运行时异常(uncheckd):RuntimeException和其子类 检查异常(checkd/搜检异常):指E ...
- java异常,异常处理,异常类 关键字:throws 和 throw 自定义的异常类
package cn.kecheng; import java.util.Scanner; /**异常:异常是指在程序的运行过程中所发生的不正常的情况,它会中断正在运行的程序 异常处理机制:java中 ...
- python的异常处理及异常类定义
python的异常处理语法和大多数语言相似: try: try块的语句... except exceptiontype1 as var:#使用as语句获得本次捕获到的异常的实例var except块语 ...
- Python异常处理及元类
一.异常处理 异常是错误发生的信号,一旦程序出错就会产生一个异常,如果该异常没有被应用程序处理,那么该异常就会跑出来,程序的执行也随之终止,也就是说异常就是一个事件,该事件会在程序执行过程中发生,影响 ...
- Java学习--异常处理及其应用类
异常是运行时在代码序列中引起的非正常状况,换句话说,异常是运行时错误.在不支持异常处理的计算机语言中,必须手动检查和处理错误----通常是通过使用错误代码,等等.这种方式既笨拙又麻烦.Java的异常处 ...
- Python 29 异常处理, 元类
所学内容 异常处理(常用) AttributeError ·························· 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性xIOError ··· ...
- 课堂动手动脑验证以及自定义异常类实现对异常处理——java异常类
异常(exception):发生在程序执行期间,表明出现了一个非法运行的情况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象.例如:数组越界和被0除. 代码验证: package test ...
- spring boot 全局异常处理及自定义异常类
全局异常处理: 在处理controller层抛出的自定义异常时,可以实现@ControllerAdvice注解捕获,配合@ExceptionHandler来增强所有的@requestMapping方法 ...
随机推荐
- 一个div在另一个div中水平垂直的方法
html <div id="main"> <div id="box"> 一个div在另一个div中垂直居中实现方法 </div&g ...
- Mac环境svn的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- JAVA调用数据库存储过程
下面将举出JAVA对ORACLE数据库存储过程的调用 ConnUtils连接工具类:用来获取连接.释放资源 复制代码 package com.ljq.test; import jav ...
- Oracle删除重复行
Oracle删除重复行 分类: ORACLE2010-12-12 17:10 423人阅读 评论(0) 收藏 举报 oracletabledeleteintegerinsert.net 查询及删除重复 ...
- [ SSH框架 ] Hibernate框架学习之四(JPA)
一.JPA概述以及它和Hibernate之间的关系 1.1.Hibernate 概述 JPA Java Persistence API,是EJB3规范中负责对象持久化的应用程序编程接口(ORM接口), ...
- windows环境下zookeeper安装和使用
一.简介 zooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件.它是一个为分布式应用提供一 ...
- Python-网站页面代码获取
Python3.6 库:urllib3, bs4 主程序是抓取亚马逊图书销售排名数据,但是亚马逊应该是加了反爬虫,拒绝疑似机器人的请求,这部分暂时以百度代替. 其实简单的页面抓取,常用的urllib. ...
- imgAreaSelect 中文文档
http://www.cnblogs.com/boychenney/archive/2011/10/08/2201996.html 一.技术文档 1.介绍 ImgAreaSelect是一jQuery插 ...
- 完整的WebRTC调用序列图
说在前面的话:此图出自Rea-Time Communication with WebRTC: https://book.douban.com/subject/25849712/ 的第五章.
- Linux基础命令归纳大全
Linux发行版本:基于linux内核提供桌面环境及办公套件的操作系统 (Linux内核只有一个) 1. 启动终端的快捷键: ctr + alt + t 2. 终端字体放大: ctr+shift+ ...