`
从此醉
  • 浏览: 1056112 次
  • 性别: Icon_minigender_1
  • 来自: US
社区版块
存档分类
最新评论

java中异常处理的几种方式

 
阅读更多
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;
		}
	}
	
}


分享到:
评论

相关推荐

    Java论文异常处理论文:JAVA异常处理的分析与研究.doc

    4. Java 异常处理的方法有两种基本思路:通过对 try-catch-finally 语句的使用实现对异常情况的处理,和通过 throws 语句执行的不在产生异常的方法中处理异常的一种方法。 通过本文的研究和分析,我们可以更好地...

    java内存机制及异常处理

    描述java内存回收机制,异常出现原因,解决方案

    基于JAVA语言的异常处理探讨分析.pdf

    大数据背景下,对于JAVA语言的研究大部分集中在对其进行的开发上,而对其异常行为的研究则相对...从JAVA语言的概念和特点等方面,对JAVA语言的异常进行了分析,阐述了JAVA语言异常种类,介绍了几 种常见异常处理方式。

    简述异常处理方式有哪几种,分别如何处理.xmind

    简述异常处理方式有哪几种,分别如何处理

    DAY_13 Java常用类及异常处理.md

    该文档从简单的Java程序入手,介绍了如何产生随机数,介绍了正则表达式的关键,在...同时本文还介绍了异常的几种情况,更清晰的认识异常的处理,在工作中写出优质的代码,离不开这些细节。本文特别适合Java小白学习。

    浅谈RxJava处理业务异常的几种方式

    本文介绍了RxJava处理业务异常的几种方式,分享给大家。具体如下: 关于异常 Java的异常可以分为两种:运行时异常和检查性异常。 运行时异常: RuntimeException类及其子类都被称为运行时异常,这种异常的特点是...

    Java异常架构详细介绍与说明(值得珍藏)

    Java异常架构主要由以下几个部分组成: Throwable:这是Java中所有错误或异常的超类。它包含了两个子类:Error和Exception。通常,Error用于指示合理的应用程序不应该试图捕获的严重问题,而Exception则用于指示...

    【09-异常处理】

    •为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是 否出现异常,也不管哪一个catch块被执行,finally块总会被执行。 异常处理的嵌套 •异常处理流程代码...

    java基于spring注解AOP的异常处理的方法

    本篇文章主要介绍了java基于spring注解AOP的异常处理的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。

    java面试常见问题.docx

    Java中的访问修饰符有哪几种?它们的区别是什么? 请解释Java中的抽象类和接口的概念及区别是什么? 请解释Java中的泛型(Generic)是什么?它有什么作用? Java中的异常处理机制是什么?如何处理异常? 请解释Java...

    Java GUI图形图象处理(源码+论文)

    本文首先对图像增强和图像分割中的几种算法进行了介绍,包括线性灰度变换,伪彩色处理,平滑处理,中值滤波,阈值分割,边缘检测等。然后用Java语言对上述各算法编程实现,并设计Java GUI(图形用户界面)用来显示...

    Java后端+Java后端中级面试题

    请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...

    Java大数据开发+Java大厂面试题

    请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...

    Java面试题+Java后端中级面试题

    请解释Java中的异常处理机制,并提供一个相关的示例。 什么是Java中的线程?如何创建和管理线程? 解释什么是Java的集合框架,并提供一些常用的集合类和它们的用法。 请解释Java中的反射机制,以及它的用途和局限性...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java开源包11

    以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...

    java开源包6

    以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...

    java开源包9

    以运行时异常的方式来管理错误的响应 使用泛型来做强类型编程 多协议扩展支持(REST, RPC, SOAP, etc) Rails3消息队列系统 Sidekiq Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 Java文件上传组件 ...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    计算机Java、网络面试资料

    1.C++或Java中的异常处理机制的简单原理和应用。 当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发...

Global site tag (gtag.js) - Google Analytics