`

java异常链处理

    博客分类:
  • Java
阅读更多
jdk1.4后的,所有异常根类Throwable部分代码

    /** 描述异常的信息 */
    private String detailMessage;

    /** 本异常包裹的原因异常,默认状态下,cause指向本异常 */
    private Throwable cause = this;

    /** 在构造函数初始化异常的细节信息 */
    public Throwable(String message, Throwable cause) {
        fillInStackTrace();
        detailMessage = message;
        this.cause = cause;
    }

    public Throwable(Throwable cause) {
    	// 将当前线程的堆栈内容记录在本异常的追踪信息中
        fillInStackTrace();
        // 记录本异常的细节信息,如果cause为null,则detailMessage为null,否则为cause.toString()
        detailMessage = (cause==null ? null : cause.toString());
        // 记录异常原因
        this.cause = cause;
    }
    
    public Throwable(Throwable cause, String message) {
    	// 将当前线程的堆栈内容记录在本异常的追踪信息中
        fillInStackTrace();
        // 记录本异常的细节信息
        detailMessage = message;
        // 记录异常原因
        this.cause = cause;
    }

    /** 获得原因异常,如果cause指向本异常,说明原因异常不存在或未知,返回null */
    public Throwable getCause() {
        return (cause==this ? null : cause);
    }

    /** 初始化原因异常,此方法最多调用一次 */
    public synchronized Throwable initCause(Throwable cause) {
    	// 如果原因异常不指向本异常,即原因异常已经存在,抛出异常:说明不能覆盖
        if (this.cause != this)
            throw new IllegalStateException("Can't overwrite cause");
        // 如果输入参数cause指向本异常,抛出异常:不可以把自身作为原因异常
        if (cause == this)
            throw new IllegalArgumentException("Self-causation not permitted");
        // 记录原因异常
        this.cause = cause;
        return this;
    }


    /** 原生方法,将当前线程的堆栈内容记录在本异常的追踪信息中 */
    public synchronized native Throwable fillInStackTrace();


关于异常链的一个例子
class HighLevelException extends Exception{
	public HighLevelException(Throwable cause) {
		super(cause);
	}
}

class MiddleLevelException extends Exception{
	public MiddleLevelException(Throwable cause) {
		super(cause);
	}
}

class LowLevelException extends Exception{
}

public class TestException {

	public void highLevelAccess() throws HighLevelException{
		try {
			middleLevelAccess();
		} catch (Exception e) {
			throw new HighLevelException(e);
		}
	}
	
	public void middleLevelAccess() throws MiddleLevelException{
		try {
			lowLevelAccess();
		} catch (Exception e) {
			throw new MiddleLevelException(e);
		}
	}

	public void lowLevelAccess() throws LowLevelException {
		throw new LowLevelException();
	}

	public static void main(String[] args) {
		try {
			new TestException().highLevelAccess();
		} catch (HighLevelException e) {
			e.printStackTrace();
		}
	}
}


错误信息
test.HighLevelException: test.MiddleLevelException: test.LowLevelException
	at test.TestException.highLevelAccess(TestException.java:24)
	at test.TestException.main(TestException.java:42)
Caused by: test.MiddleLevelException: test.LowLevelException
	at test.TestException.middleLevelAccess(TestException.java:32)
	at test.TestException.highLevelAccess(TestException.java:22)
	... 1 more
Caused by: test.LowLevelException
	at test.TestException.lowLevelAccess(TestException.java:37)
	at test.TestException.middleLevelAccess(TestException.java:30)
	... 2 more

分享到:
评论

相关推荐

    Java异常处理体系

    这个主题,"Java异常处理体系",涉及到Java如何优雅地处理程序运行时的异常,确保程序的健壮性和稳定性。这篇博文链接(已提供但无法直接访问)可能详细解释了Java异常处理的基本概念、机制以及最佳实践。 Java异常...

    C++ Java异常处理比较

    本文将对C++和Java两种语言的异常处理机制进行深入的比较和分析,探讨它们的相似之处以及不同之处,以帮助开发者更好地理解和应用这两种语言。 首先,异常处理的基本目的是捕获并处理运行时错误,这些错误通常包括...

    浅析JAVA异常处理机制.pdf

    ### 浅析JAVA异常处理机制 #### 一、Java异常处理机制概述 异常处理是Java语言中的一个重要机制,它能够确保程序在遇到不可预料的情况时仍能维持稳定运行。异常处理主要包括三个方面:捕获异常、控制程序流程以及...

    java高端技术课程--Java异常处理详解

    2. **异常链**:当一个异常在处理另一个异常的过程中被抛出,它们之间可以形成异常链,这有助于调试和追踪问题。 3. **自定义异常**:开发人员可以通过创建新的异常类来表示特定的错误条件,该类继承自`Exception`...

    高效java异常处理机制

    通过遵循上述最佳实践,开发者可以编写出更健壮、可维护的Java代码,有效地利用Java异常处理机制来提高程序的稳定性。同时,阅读并理解"Effective Java Exceptions"文档可以帮助进一步深化对Java异常处理的理解。

    Java异常处理,非常适合Java爱好者

    Java异常处理是Java编程语言中的一个关键特性,它允许程序员优雅地处理程序运行时可能出现的错误和不正常状况。在Java中,异常是程序执行过程中出现的问题,它们中断了正常的控制流程,使得程序无法继续按照预期的...

    Java 异常处理的误区和经验总结

    以下是对Java异常处理的一些误区和经验总结。 **误区一:过度使用try-catch块** 有些开发者习惯于在每个函数的开始部分都套用try-catch块,以为这样可以捕捉所有可能出现的异常。实际上,这种做法使得代码变得混乱...

    java异常处理

    - 异常处理链(Exception Chaining):一个异常可以导致另一个异常的抛出,形成一个异常链。 2. 异常分类: - 检查性异常(Checked Exceptions):这些异常在编译时就需要被处理,例如`IOException`。如果未被...

    java中的异常处理

    Exception类是所有Java异常的基类,它继承自Throwable类。常见的异常类有IOException、NullPointerException、ArrayIndexOutOfBoundsException等。 三、异常处理机制 Java提供了五个关键字来处理异常:try、catch、...

    Java异常处理Java异常处理.doc

    Java异常处理是编程中至关重要的一个部分,它用于管理和恢复程序执行过程中可能出现的错误或异常情况。当程序遇到无法预见的问题,如文件未找到、网络连接中断或计算溢出等,Java通过异常处理机制来优雅地处理这些...

    Java-Java异常处理教程

    Java异常处理是编程中至关重要的一个环节,它帮助开发者在程序运行时捕获并处理错误,确保程序的健壮性和稳定性。在这个Java异常处理教程中,我们将深入探讨这个主题,以便提升你的Java编程技能。 首先,Java异常是...

    java异常框架处理.pdf

    Java异常框架处理是Java编程中十分关键的一部分,主要涉及到Java异常类的层次结构、异常的分类、异常的处理方式,以及如何在实际开发中使用异常框架来处理各种运行时错误。 首先,我们需要了解Java的异常类的层次...

    Java异常学习资料

    4. **异常链**:当一个异常在处理另一个异常的过程中被抛出,可以形成异常链,提供更详细的错误信息。 5. **自定义异常**:开发者可以通过继承`Exception`或其子类来创建自定义异常,以适应特定业务场景。 6. **多...

    java 异常处理练习

    1. **try-catch-finally**:这是Java异常处理的核心构造,用于捕获并处理异常。`try`块包含可能会抛出异常的代码,如果在`try`块中出现异常,程序会立即跳转到相应的`catch`块。`catch`块定义了如何处理特定类型的...

    Java异常处理教程

    Java异常处理是编程过程中的重要组成部分,它提供了一种机制来捕获并处理程序运行时可能出现的错误。在Java中,异常是一种事件,通常由不正常的条件或意外情况引起,中断了程序的正常流程。本教程将深入探讨Java异常...

    Java异常处理源程序、各种源程序

    Java异常处理是编程过程中的重要组成部分,特别是在大型的、复杂的软件系统中,它扮演着确保程序稳定性和健壮性的关键角色。本资料包主要聚焦于Java的异常处理机制,提供了丰富的源程序示例,帮助开发者深入理解并...

    Java异常处理机制及应用.pdf

    Java 异常处理机制及应用 Java 异常处理机制是一种重要的技术,它能够帮助开发者处理 Java 语言中的错误和异常,从而提高程序的可靠性和稳定性。本文将从 Java 异常处理机制的原理、分类、抛出和捕获机制、原则等...

    Java异常处理的方法和几个例子源码.rar

    Java异常处理是编程中至关重要的一个环节,它用于在程序执行过程中处理错误和不正常的情况。这个压缩包“Java异常处理的方法和几个例子源码.rar”包含了一些示例代码,帮助开发者深入理解Java中的异常处理机制。下面...

    深入理解java异常处理机制Java开发Java经验技巧共

    Java异常处理机制是Java编程中不可或缺的一部分,它提供了一种有序地处理程序错误和异常情况的方法。这篇19页的PDF文档《深入理解java异常处理机制Java开发Java经验技巧共》可能涵盖了Java异常处理的基本概念、最佳...

    简单的java异常处理

    Java异常处理是编程中至关重要的一个环节,它确保了程序在遇到错误或异常情况时能够以优雅的方式终止,而不是突然崩溃。在这个简单的Java异常处理主题中,我们将深入探讨异常的设定、捕捉和处理过程,以及如何在...

Global site tag (gtag.js) - Google Analytics