package com.eric.exception;
public class RethrowException {
public static void main(String[] args) {
try {
// g0();
// g1();
// g2();
// g3();
g6();
} catch (Exception e) {
System.out.println("##CAUSE Message:###" + e.getMessage());
e.printStackTrace();
}
}
/*
* method f() exception was caugth by g4() method::exception chaining
* exception was caugth by g5() method::exception chaining
* com.eric.exception.RethrowException$Test2Exception at
* com.eric.exception.RethrowException.g5(RethrowException.java:32) at
* com.eric.exception.RethrowException.g6(RethrowException.java:21) at
* com.eric.exception.RethrowException.main(RethrowException.java:11) Caused
* by: com.eric.exception.RethrowException$Test2Exception at
* com.eric.exception.RethrowException.g4(RethrowException.java:43) at
* com.eric.exception.RethrowException.g5(RethrowException.java:29) ... 2
* more Caused by: com.eric.exception.RethrowException$Test1Exception:
* #############ERROR############## at
* com.eric.exception.RethrowException.f(RethrowException.java:125) at
* com.eric.exception.RethrowException.g4(RethrowException.java:40) ... 3
* more
*/
public static void g6() throws Test2Exception {
try {
g5();
} catch (Test2Exception e) {
throw e;
}
}
public static void g5() throws Test2Exception {
try {
g4();
} catch (Test2Exception e) {
System.out.println("exception was caugth by g5() method::exception chaining");
RethrowException.Test2Exception t2 = new RethrowException().new Test2Exception();
t2.initCause(e);
throw t2;
}
}
public static void g4() throws Test2Exception {
try {
f();
} catch (Test1Exception e) {
System.out.println("exception was caugth by g4() method::exception chaining");
RethrowException.Test2Exception t2 = new RethrowException().new Test2Exception();
t2.initCause(e);
throw t2;
}
}
/*
* method f() exception was caugth by g1() method
* com.eric.exception.RethrowException$Test1Exception:
* #############ERROR############## at
* com.eric.exception.RethrowException.f(RethrowException.java:78) at
* com.eric.exception.RethrowException.g1(RethrowException.java:49) at
* com.eric.exception.RethrowException.main(RethrowException.java:7)
*/
public static void g1() throws Test1Exception {
try {
f();
} catch (Test1Exception e) {
System.out.println("exception was caugth by g1() method");
throw e;
}
}
/*
* 原始的異常信息將丟失
*
* method f() exception was caugth by g2() method::use fillInstackTrace
* method com.eric.exception.RethrowException$Test1Exception:
* #############ERROR############## at
* com.eric.exception.RethrowException.g2(RethrowException.java:69) at
* com.eric.exception.RethrowException.main(RethrowException.java:8)
*/
public static void g2() throws Exception {
try {
f();
} catch (Test1Exception e) {
System.out.println("exception was caugth by g2() method::use fillInstackTrace method");
throw (Exception) e.fillInStackTrace();
}
}
/*
* 原始的異常信息將丟失
*
* method f() exception was caugth by g3() method::change exception object
* com.eric.exception.RethrowException$Test2Exception: rethrow by t2 at
* com.eric.exception.RethrowException.g3(RethrowException.java:86) at
* com.eric.exception.RethrowException.main(RethrowException.java:9)
*/
public static void g3() throws Exception {
try {
f();
} catch (Test1Exception e) {
System.out.println("exception was caugth by g3() method::change exception object");
// e.printStackTrace();
RethrowException.Test2Exception t2 = new RethrowException().new Test2Exception("rethrow by g3");
throw t2;
}
}
/*
* 通过initCause()方法,把原始的异常堆栈信息保存下来。 下面的异常信息中包含了原始的異常信息
* RethrowException.f(RethrowException.java:125)
*
*
* method f() com.eric.exception.RethrowException$Test2Exception: rethrow by
* g0 at com.eric.exception.RethrowException.g0(RethrowException.java:117)
* at com.eric.exception.RethrowException.main(RethrowException.java:10)
* Caused by: com.eric.exception.RethrowException$Test1Exception:
* #############ERROR############## at
* com.eric.exception.RethrowException.f(RethrowException.java:125) at
* com.eric.exception.RethrowException.g0(RethrowException.java:113) ... 1
* more exception was caugth by g0() method::change exception object
*/
public static void g0() throws Exception {
try {
f();
} catch (Test1Exception e) {
System.out.println("exception was caugth by g0() method::change exception object");
// e.printStackTrace();
RethrowException.Test2Exception t2 = new RethrowException().new Test2Exception("rethrow by g0");
t2.initCause(e);
throw t2;
}
}
public static void f() throws Test1Exception {
System.out.println("method f()");
throw new RethrowException().new Test1Exception("#############ERROR##############");
}
class Test1Exception extends Exception {
private static final long serialVersionUID = -2656978134207266579L;
public Test1Exception(String message) {
super(message);
}
}
class Test2Exception extends Exception {
private static final long serialVersionUID = -4063317779983989554L;
private String msg;
public Test2Exception() {}
public Test2Exception(String msg) {
super(msg);
this.msg = msg;
}
}
}
分享到:
相关推荐
4. Java 异常处理的方法有两种基本思路:通过对 try-catch-finally 语句的使用实现对异常情况的处理,和通过 throws 语句执行的不在产生异常的方法中处理异常的一种方法。 通过本文的研究和分析,我们可以更好地...
描述java内存回收机制,异常出现原因,解决方案
大数据背景下,对于JAVA语言的研究大部分集中在对其进行的开发上,而对其异常行为的研究则相对...从JAVA语言的概念和特点等方面,对JAVA语言的异常进行了分析,阐述了JAVA语言异常种类,介绍了几 种常见异常处理方式。
简述异常处理方式有哪几种,分别如何处理
该文档从简单的Java程序入手,介绍了如何产生随机数,介绍了正则表达式的关键,在...同时本文还介绍了异常的几种情况,更清晰的认识异常的处理,在工作中写出优质的代码,离不开这些细节。本文特别适合Java小白学习。
本文介绍了RxJava处理业务异常的几种方式,分享给大家。具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常。 运行时异常: RuntimeException类及其子类都被称为运行时异常,这种异常的特点是...
Java异常架构主要由以下几个部分组成: Throwable:这是Java中所有错误或异常的超类。它包含了两个子类:Error和Exception。通常,Error用于指示合理的应用程序不应该试图捕获的严重问题,而Exception则用于指示...
•为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是 否出现异常,也不管哪一个catch块被执行,finally块总会被执行。 异常处理的嵌套 •异常处理流程代码...
本篇文章主要介绍了java基于spring注解AOP的异常处理的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
Java中的访问修饰符有哪几种?它们的区别是什么? 请解释Java中的抽象类和接口的概念及区别是什么? 请解释Java中的泛型(Generic)是什么?它有什么作用? Java中的异常处理机制是什么?如何处理异常? 请解释Java...
本文首先对图像增强和图像分割中的几种算法进行了介绍,包括线性灰度变换,伪彩色处理,平滑处理,中值滤波,阈值分割,边缘检测等。然后用Java语言对上述各算法编程实现,并设计Java GUI(图形用户界面)用来显示...
请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...
请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...
请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...
以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...
以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...
Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...
1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发...