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

本文实例讲述了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方法就会结束。

更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。

(0)

相关推荐

  • Java中内存区域的划分与异常详解

    前言 JAVA内存区域主要由程序计数器.java 虚拟机栈.本地方法栈.Java堆.方法区以及运行时常量池组成.本文将给大家详细介绍关于Java内存区域的划分与异常的相关内容,下面话不多说了,来一起看看详细的介绍吧. 运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域. 程序计数器 线程私有.可看作是 当前线程所执行的字节码的行号指示器 ,字节码解释器的工作是通过改变这个计数值来读取下一条要执行的字节码指令. 多线程是通过线程轮流切换并分配处理器执行时间来实现的,任何

  • Java的异常类型总结

    Java的设计目的是让程序员有机会设计一个没有错误的应用程序.当应用程序与资源或用户交互时,程序员可能会知道一些异常,这些异常是可以处理的.不幸的是,也有程序员无法控制或简单忽略的例外情况.简而言之,并不是所有的异常都是相同的,因此程序员需要考虑几种类型. 异常是导致程序无法在其预期的执行中运行的事件.异常有三种类型--检查异常.错误和运行时异常. The Checked Exception(检查异常) 已检查异常是Java应用程序应该能够处理的异常.例如,如果应用程序从文件中读取数据,它应该能

  • Java如何自定义异常打印非堆栈信息详解

    前言 在学习Java的过程中,想必大家都一定学习过异常这个篇章,异常的基本特性和使用这里就不再多讲了.什么是异常?我不知道大家都是怎么去理解的,我的理解很简单,那就是不正常的情况,比如我现在是个男的,但是我却有着女人所独有的东西,在我看来这尼玛肯定是种异常,简直不能忍.想必大家都能够理解看懂,并正确使用. 但是,光学会基本异常处理和使用不够的,在工作中出现异常并不可怕,有时候是需要使用异常来驱动业务的处理,例如: 在使用唯一约束的数据库的时候,如果插入一条重复的数据,那么可以通过捕获唯一约束异常

  • Java异常处理中的各种细节汇总

    前言 今天我们来讨论一下,程序中的错误处理. 在任何一个稳定的程序中,都会有大量的代码在处理错误,有一些业务错误,我们可以通过主动检查判断来规避,可对于一些不能主动判断的错误,例如 RuntimeException,我们就需要使用 try-catch-finally 语句了. 有人说,错误处理并不难啊,try-catch-finally 一把梭,try 放功能代码,在 catch 中捕获异常.处理异常,finally 中写那些无论是否发生异常,都要执行的代码,这很简单啊. 处理错误的代码,确实并

  • Java异常处理之try...catch...finally详解

    异常处理机制已经成为判断一门编程语言是否成熟的标准之一,其对代码的健壮性有很大影响.一直以来异常处理使用不是很得心应手,今天对异常进行了较为深入的学习,这篇主要是对try-catch-finally的一个总结. 一.java继承体系 Java语言为异常处理提供了丰富的异常类,这些类之间有严格的继承关系.如图: 从图中我们可以看出,所有的类都是继承于Throwable这个父类,java将所有的非正常情况分为两种:Error(错误)和Exception(异常),Error错误一般是于虚拟机相关的问题

  • 浅谈十个常见的Java异常出现原因

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 1.NullPointerException 空指针异常,操作一个 null 对象的方法或属性时会抛出这个异常.具体看上篇文章:空指针常见案例. 2.OutofOutofMemoryError 内存出现异常的一种异常,这不是程序能控制的,是指要分配的对象的内存超出了当前最大的堆内存,需要调整堆内存大小(-Xmx)以及优化程序. 3.IOException I

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

    本文实例讲述了Java异常跟踪栈定义与用法.分享给大家供大家参考,具体如下: 一.异常跟踪栈简介 异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程. 二.main方法中异常跟踪栈的应用 1 代码示例 class SelfException extends RuntimeException { SelfException(){} SelfException(String msg

  • Java数据结构之稀疏矩阵定义与用法示例

    本文实例讲述了Java数据结构之稀疏矩阵定义与用法.分享给大家供大家参考,具体如下: 稀疏矩阵非零元素的三元组类: package com.clarck.datastructure.matrix; /** * 稀疏矩阵的压缩存储 * * 稀疏矩阵非零元素的三元组类 * * @author clarck * */ public class Triple implements Comparable<Triple> { // 行号,列号, 元素值,默认访问权限 int row, colum, val

  • Java 异常的栈轨迹(Stack Trace)详解及实例代码

    Java 异常的栈轨迹(Stack Trace)详解 捕获到异常时,往往需要进行一些处理.比较简单直接的方式就是打印异常栈轨迹Stack Trace.说起栈轨迹,可能很多人和我一样,第一反应就是printStackTrace()方法.其实除了这个方法,还有一些别的内容也是和栈轨迹有关的. 1.printStackTrace() 首先需要明确,这个方法并不是来自于Exception类.Exception类本身除了定义了几个构造器之外,所有的方法都是从其父类继承过来的.而和异常相关的方法都是从jav

  • Android编程图片操作类定义与用法示例【拍照,相册选图及裁剪】

    本文实例讲述了Android编程图片操作类定义与用法.分享给大家供大家参考,具体如下: 主界面类:拍照及选择相册图片 import android.app.Activity; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import androi

  • Java责任链模式定义与用法分析

    本文实例讲述了Java责任链模式定义与用法.分享给大家供大家参考,具体如下: 使很多对象都有处理请求的机会,从而避免请求的发送者和接受者之间的耦合关系.将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止 责任链模式主要包括以下几个角色 1.处理者:处理者是一个接口,负责规定具体处理者处理用户请求的方法以及具体处理者设置后继处理对象的方法 2.具体处理者:具体处理者是实现处理接口的类的实例,具体处理者通过调用处理接口规定的方法处理用户的请求,既在接到用户的请求后,处理者将调用接

  • Java简单工厂模式定义与用法实例分析

    本文实例讲述了Java简单工厂模式定义与用法.分享给大家供大家参考,具体如下: 一 代码 // 抽象产品(Abstract Product)角色 interface Block { public void print(); } // 具体产品角色 class IBlock implements Block { public void print() { System.out.println("我是一个I形的方块!"); } } // 具体产品角色 class LBlock implem

  • JAVA对称加密算法PBE定义与用法实例分析

    本文实例讲述了JAVA对称加密算法PBE定义与用法.分享给大家供大家参考,具体如下: 一 AES.DES和3DES在使用上比较一致 二 PBE算法优点 三 PBE介绍 1.PBE:Password Based Encryption 基于口令加密.通过加Salt来增强安全性. 2.对已有算法的包装 3.JDK和BC的实现 4.通过加Salt来增强安全性 四 常见算法 五代码实现 package com.imooc.security.pbe; import java.security.Key; im

  • Java抽象类和抽象方法定义与用法实例详解

    本文实例讲述了Java抽象类和抽象方法定义与用法.分享给大家供大家参考,具体如下: 一.Java抽象类 参考资料:Java抽象类 详解 1.抽象类的说明 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被继承,才能被使用.也是因为这

  • java抽象类和接口定义与用法详解

    本文实例讲述了java抽象类和接口定义与用法.分享给大家供大家参考,具体如下: 抽象类 抽象类定义 只约定类所具有的抽象行为,没有具体实现相应行为. 语法格式 abstract class 类名{ 常量; 变量; 构造(); 访问修饰符abstract 返回类型 方法名;//抽象方法 普通方法; 静态方法(); } 应用场景 1.不适合创建对象. 2.有些功能没有必要实现,有不同的子类实现. 3.每次使用的都是子类的对象. 4.为所有的子类提供了一个模板,所有的子类都是在此模板的基础之上添加和修

  • javascript递归函数定义和用法示例分析

    递归函数:是指函数直接或间接调用函数本身,则称该函数为递归函数. 这句话理解起来并不难,从概念上出发,给出以下的例子: function foo(){ console.log("函数 foo 是递归函数."); foo(); } 这个例子的 foo 函数就是一个递归函数. 当你把这个函数拿到浏览器上运行的时候,你会发现内存溢出了,为什么呢?因为这个递归函数没有停止处理或运算的出口,因此这个递归函数就演变为一个死循环. 那如何使用递归呢? 使用递归函数必须要符合两个条件: 1. 在每一次

随机推荐