public class TestChainException {
public static void main(String[] args) throws Throwable {
catchException();
}
public static void catchException() throws Throwable{
try {
throwException();
} catch (Exception e) {
System.out.println("------------------");
throw e;
// throw e.fillInStackTrace();
}
}
public static void throwException() throws Exception{
System.out.println("good");
throw new Exception("this is a exception");
}
}
输出结果为:
good
------------------
Exception in thread "main" java.lang.Exception: this is a exception
at TestChainException.throwException(TestChainException.java:20)
at TestChainException.catchException(TestChainException.java:11)
at TestChainException.main(TestChainException.java:5)
去掉注释:并注释:throw e;
good
------------------
Exception in thread "main" java.lang.Exception: this is a exception
at TestChainException.catchException(TestChainException.java:15)
at TestChainException.main(TestChainException.java:5)
区别两个结果会发现异常抛出信息的差别,使用throw e.fillInStackTrace();后异常抛出信息的抛出点不再有at TestChainException.throwException(TestChainException.java:20)
分享到:
相关推荐
Java将异常视为对象,这意味着当程序中发生异常时,会创建一个异常对象并将其抛出。异常处理机制包括了五个关键字:try、catch、finally、throw和throws。 异常的分类主要分为三大类: 1. 错误类(Error):这是最...
2. **异常抛出** - 使用`throw`关键字显式抛出异常。 - 示例:`throw new IllegalArgumentException("Invalid argument");` #### 七、异常处理策略 1. **异常处理的顺序** - `catch`块按照声明顺序依次尝试捕获...
异常链可以通过 fillInStackTrace() 方法来重新抛出异常。 8. 异常丢失 异常丢失是 Java 语言中的一种异常处理机制,它允许开发者丢失异常信息。异常丢失可以通过 fillInStackTrace() 方法来重新抛出异常。 Java ...
在Java中,catch块可以捕获try块中抛出的异常或者其父类异常。 **知识点3:异常捕获顺序** - **选项解析**: - A) 最前:将`catch(Exception e)`放在所有其他catch块之前。 - B) 最后:将`catch(Exception e)`...
如果程序中发生类似的异常,JVM会直接抛出此类异常,并打出响应的异常栈信息。 checked Exception是我们最常见的异常种类,在代码中使用的异常基本上都是此类异常,此类异常会在代码编译阶段由Java编译器进行语法...
通过查看源码,我们可以得知,当抛出异常时,程序会调用此异常的fillInStackTrace方法,但是,大部分异常都没有对该方法做处理。基本是调用super的方法。可以看到,此方法的父类实现,是在Throwable类中。而且此方法...
2. **异常抛出:** 异常应当在真正错误发生时抛出,而非作为控制流的手段。 3. **异常栈跟踪:** 异常对象的栈跟踪信息由`fillInStackTrace()`方法生成,该过程较为耗时,仅在调试阶段使用,生产环境中避免滥用。 ...
然而,异常处理本身也会对程序性能产生负面影响,这是因为异常抛出时需要创建一个新的对象,并且需要消耗底层资源。因此,在不影响程序功能性的前提下,优化异常处理可以显著提升程序性能。 **1.1 优化示例** 以下...
抛出异常首先要创建一个新的对象。Throwable接口的构造函数调用名为fillInStackTrace()的本地 (Native)方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,VM就必须调整调用堆栈,因为在...
异常抛出不仅涉及创建新对象,还会触发fillInStackTrace()方法,这会遍历调用栈收集跟踪信息,对性能产生负面影响。因此,异常应仅用于错误处理,而不是用作正常流程控制。例如,避免无谓的NullPointerException,...
这些技术允许在运行时动态地修改类的行为,包括在抛出异常时插入自定义的堆栈跟踪信息。 压缩包中的`java-stacksrc_main.zip`可能包含了示例代码或者一个工具,用于生成带有源代码片段的堆栈跟踪。这可能是通过解析...
抛出异常时,需创建新对象,并调用`fillInStackTrace()`方法收集调用栈信息,这要求虚拟机调整调用栈。因此,异常应仅用于错误处理,而非控制程序流程,以提升效率。 **1.4 避免重复初始化变量** Java默认初始化...
开发者需要通过 `try-catch` 语句块来捕获并处理这类异常,或者在方法签名中声明该方法可能会抛出此类异常。这样做的目的是确保调用者知道并能适当地处理这些预期之外的情况。 `Error` 类则代表了更严重的错误,...
抛出异常首先要创建一个新的对象,Throwable接口的构造函数调用名为fillInStackTrace()的本地同步方法,fillInStackTrace()方法检查堆栈,收集调用跟踪信息。只要有异常被抛出,Java虚拟机就必须调整调用堆栈,因为...