`
cakin24
  • 浏览: 1368097 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

异常跟踪栈

    博客分类:
  • java
阅读更多

一 异常跟踪栈简介
异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。

二 main方法中异常跟踪栈的应用
1 代码示例

class SelfException extends RuntimeException
{
	SelfException(){}
	SelfException(String msg)
	{
		super(msg);
	}
}
public class PrintStackTraceTest
{
	public static void main(String[] args)
	{
		firstMethod();
	}
	public static void firstMethod()
	{
		secondMethod();
	}
	public static void secondMethod()
	{
		thirdMethod();
	}
	public static void thirdMethod()
	{
		throw new SelfException("自定义异常信息");
	}
}

2 运行结果
Exception in thread "main" SelfException: 自定义异常信息
 at PrintStackTraceTest.thirdMethod(PrintStackTraceTest.java:26)
 at PrintStackTraceTest.secondMethod(PrintStackTraceTest.java:22)
 at PrintStackTraceTest.firstMethod(PrintStackTraceTest.java:18)
 at PrintStackTraceTest.main(PrintStackTraceTest.java:14)
3 结果分析
只要异常没有被完全捕获,异常从发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次创给其调用者……直至最后传到 main方法,如果main方法依然没有处理该异常,JVM会中止该程序,并打印异常的跟踪栈信息。

 

三 多线程中异常跟踪栈的应用
1 代码示例

public class ThreadExceptionTest implements Runnable
{
	public void run()
	{
		firstMethod();
	}
	public void firstMethod()
	{
		secondMethod();
	}
	public void secondMethod()
	{
		int a = 5;
		int b = 0;
		int c = a / b;
	}
	public static void main(String[] args)
	{
		new Thread(new ThreadExceptionTest()).start();
	}
}

2 运行结果
Exception in thread "Thread-0" java.lang.ArithmeticException: / by zero
 at ThreadExceptionTest.secondMethod(ThreadExceptionTest.java:16)
 at ThreadExceptionTest.firstMethod(ThreadExceptionTest.java:10)
 at ThreadExceptionTest.run(ThreadExceptionTest.java:6)
 at java.lang.Thread.run(Thread.java:619)
3 结果分析
程序在Thread的run方法中出现了ArithmeticException异常,这个异常的源头是ThreadException的SecondMethod方法,位于文件16行。这个异常传播到Thread类的run方法就会结束。

0
1
分享到:
评论

相关推荐

    Java异常跟踪栈定义与用法示例

    Java 异常跟踪栈是 Java 语言中的一种错误处理机制,用于追踪和处理程序中的异常情况。本文将详细介绍 Java 异常跟踪栈的定义、原理和使用技巧,并通过实例代码展示其应用。 一、异常跟踪栈简介 异常跟踪栈是 Java...

    Java面向对象程序设计 实验四 异常处理

    Java面向对象程序设计实验四的主要目的是掌握异常处理的技术,了解自定义异常类与异常跟踪栈的概念。在这个实验中,我们将学习如何捕获并处理异常,并通过编写程序来验证自定义异常类的使用。 一、实验目的 异常...

    【09-异常处理】

    JVM对异常的处理方法是:打印异常跟踪栈信息,并中止程序运行,这 就是前面程序在遇到异常后自动结束的原因。 •throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗 号隔...

    推荐优质Java课程 疯狂Java语言编程 Java入门到进阶教程 10.异常处理(共24页).ppt

    6. **异常跟踪栈**:当异常发生时,Java会生成一个异常堆栈跟踪,记录异常发生时的执行路径,通过`printStackTrace()`方法可以打印出来,这对于调试非常有用。 7. **Java 7的改进**:Java 7引入了多异常捕捉,一个`...

    程序崩溃自动重启以及将未捕获到的异常写退出栈

    为了解决这个问题,我们可以编写一个全局的异常处理器,该处理器在异常发生时捕获异常,并在控制台上打印详细的堆栈跟踪信息。在C++中,可以使用`set_unexpected`和`set_terminate`函数注册自定义的异常处理函数;在...

    疯狂JAVA讲义

    10.5 Java的异常跟踪栈 374 10.6 异常处理规则 376 10.6.1 不要过度使用异常 377 10.6.2 不要使用过于庞大的try块 378 10.6.3 避免使用Catch All语句 378 10.6.4 不要忽略捕获到的异常 379 10.7 本章小结 379 ...

    深入理解java异常(异常中的Error+异常中的Exception+检查异常+运行时异常+异常处理+throws关键字等)

    在 Java 中,Exception 类提供了一组方法用来获取异常的一些信息,例如 printStackTrace() 方法,可以打印出异常的跟踪栈信息。 下面是 Java 异常机制的继承层次结构图: * Throwable + Error + Exception - ...

    栈类-建栈,进栈,出栈

    例如,解析括号匹配时,可以使用栈来跟踪未闭合的括号;在编译器中,栈用于存储函数调用的上下文,以便于正确返回到之前的执行点。 总的来说,栈是一种强大的工具,理解和掌握其基本操作对于任何IT专业人员来说都是...

    数据结构 顺序栈

    在`sqstack_test.cpp`测试代码中,可能包括一系列的单元测试,例如创建一个顺序栈,进行压栈、出栈操作,检查栈的状态,以及处理异常情况,如空栈出栈等,以确保顺序栈的正确实现。 总结来说,顺序栈是一种简单而...

    顺序栈(C++)

    - `int` 大小成员,跟踪当前栈的大小。 类的成员函数可以包括构造函数、析构函数、Push、Pop、Top、IsEmpty和Size。构造函数可以初始化空栈,析构函数负责清理动态分配的内存。 在实现Push时,我们首先检查当前...

    数据结构顺序栈源码,能直接运行

    1. **栈的定义**:首先,源码会定义一个结构体或者类来表示顺序栈,这个结构通常包含一个数组和一个指针,用于跟踪栈顶位置。数组用于存储元素,而指针则记录当前栈中元素的数量或栈顶索引。 2. **初始化**:初始化...

    python中with用法讲解

    `__exit__`方法接收四个参数:`exc_type`, `exc_val`, `exc_tb`,分别代表异常类型、异常值和异常跟踪栈,它们可以帮助我们在清理时处理异常情况。 4. 异常处理: 如果`__exit__`方法返回`True`,那么`with`语句块...

    异常辅助模块5.2源码及调用例子

    2,重写了调用栈跟踪的代码,增加了更加精准的函数劫持跟踪;。3,现在支持在异常回调时,输出dmp文件了(可用vs或windbg打开,获取错误重现状态)。4,修正若干BUG;(包括一些严重的隐患)。5,一些细节调整,如...

    心希盼 c++ 数据结构 栈

    如果栈为空,应抛出异常表示栈空。 4. 查看栈顶元素(Top):不移除地查看栈顶元素,通常用于检查栈顶元素而无需破坏栈的状态。 5. 判断栈是否为空(Empty):检查栈中是否有元素,无元素则返回真,否则返回假。 6. ...

    Release异常捕获

    4. **记录异常信息**:当捕获到异常时,应记录详细的异常信息,如异常类型、异常消息、堆栈跟踪(包括异常发生的地址、出错行和出错代码)。这些信息对于调试和问题定位至关重要。 5. **最终块(finally block)**...

    C++实现SIP协议栈

    对于每个请求,协议栈需要维护一个状态机来跟踪事务生命周期,并根据SIP规范处理重传、超时和重定向。 5. **路由与重定向**:SIP消息可能需要经过多个代理服务器,因此需要实现路由选择算法,根据消息中的Record-...

    e语言-异常辅助模块5.2源码及调用例子

    2,重写了调用栈跟踪的代码,增加了更加精准的函数劫持跟踪;3,现在支持在异常回调时,输出dmp文件了(可用vs或windbg打开,获取错误重现状态)4,修正若干BUG;(包括一些严重的隐患)5,一些细节调整,如调用栈...

    java throw抛出异常实例二

    `e.printStackTrace()`方法用于打印异常发生时的堆栈跟踪,这对于调试非常有用,因为它显示了异常发生的确切位置和调用栈。 Java的异常处理机制还包括`finally`块,它包含的代码无论是否发生异常都会被执行。这通常...

    调试技术与异常(错误)处理

    5. **异常链**:保留异常发生时的上下文信息,通过记录异常的堆栈跟踪,有助于追溯问题根源。 6. **全局异常处理器**:在应用级别设置异常处理器,统一处理未被捕获的异常,提高系统稳定性。 在实际应用中,这些...

    一个专门处理C++异常的类和例子

    这些错误通常包括非法存取、栈溢出和被零除等致命性异常。通过使用这个类,开发者可以在程序中设置一个全局的异常处理机制,确保即使在遇到错误时也能提供有价值的调试信息。 异常处理在C++中是通过`try`、`catch`...

Global site tag (gtag.js) - Google Analytics