Throwable中的fillInStackTrace

fillInStackTrace 方法的作用就是一追可以追溯到栈的底部。

转载一个测试类:

<span style="font-family:Microsoft YaHei;font-size:14px;">package com.exception;

/**
 * Created with IntelliJ IDEA.
 * User: 菜鸟大明
 * Date: 14-7-7
 * Time: 下午10:42
 * To change this template use File | Settings | File Templates.
 */
class Exception2 {
    Throwable th =  new Throwable();;
    public Exception2() {
        System.out.println("in constructor");
    }
    public void a() {
        c();
    }
    public void b() {
        System.out.println("in b");
        th.fillInStackTrace();
        th.printStackTrace(System.out);
        System.out.println("in b");
    }
    public void c(){
        b();
        th.fillInStackTrace();
        System.out.println("in c");
        th.printStackTrace(System.out);
        System.out.println("in c");
    }
    public static void main(String [] args) {
        Exception2 t3 = new Exception2();
        t3.a();
    }
}
</span>

上述代码的执行顺序为 main()→a()→b()→c()

打印结果为:

in constructor

in b

java.lang.Throwable

at com.exception.Exception2.b(Exception2.java:23)

at com.exception.Exception2.c(Exception2.java:29)

at com.exception.Exception2.a(Exception2.java:18)

at com.exception.Exception2.main(Exception2.java:40)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

in b

in c

java.lang.Throwable

at com.exception.Exception2.c(Exception2.java:30)

at com.exception.Exception2.a(Exception2.java:18)

at com.exception.Exception2.main(Exception2.java:40)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

in c

如果把fillInStackTrace 注释掉的话,输出结果则为:

in constructor

in b

java.lang.Throwable

at com.exception.Exception2.<init>(Exception2.java:11)

at com.exception.Exception2.main(Exception2.java:32)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

in b

in c

java.lang.Throwable

at com.exception.Exception2.<init>(Exception2.java:11)

at com.exception.Exception2.main(Exception2.java:32)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)

at java.lang.reflect.Method.invoke(Method.java:597)

at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

in c

Throwable中的fillInStackTrace

时间: 2024-11-05 11:28:31

Throwable中的fillInStackTrace的相关文章

异常处理和Throwable中的几个方法

package cn.lijun.demo; /* * try { //需要被检测的语句. } catch(异常类 变量) { //参数. //异常的处理语句. } finally { //一定会被执行的语句. } * * */ public class ExceptionDemo { public static void main(String[] args) { try { fun1(0); } catch (Exception ex) { System.out.println(ex); e

Java异常打印输出中常见方法的分析

Java异常是在Java应用中的警报器,在出现异常的情况下,可以帮助我们程序猿们快速定位问题的类型以及位置.但是一般在我们的项目中,由于经验阅历等多方面的原因,依然有若干的童鞋在代码中没有正确的使用异常打印方法,导致在项目的后台日志中,没有收到日志或者日志信息不完整等情况的发生,这些都给项目埋下了若干隐患.本文将深入分析在异常日志打印过程中的若干情况,并给出若干的使用建议. 1. Java异常Exception的结构分析 我们通常所说的Exception主要是继承于Throwable而来,可以参

关于JAVA项目中的常用的异常处理情况

程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常. 在出现异常时,可能会出现错误提示词为Throwable,Error, AWTError,IOError, LinkageErro,ThreadDeath,Exception,SQLException, IOException ,RuntimeException,IndexOutOfBoundsException,NullPointerException, ClassCastException.Throwable

JAVA项目中的常用的异常处理情况

在网上查阅了相关资料得出了以下JAVA项目中的常用的异常处理情况总结: 1.不要捕获 Java 类库中定义的继承自 RuntimeException 的运行时异常类,如:IndexOutOfBoundsException / NullPointerException,这类异常由程序员预检查违法来规避,保证程序健壮性. 2.异常不要用来做流程控制,条件控制,因为异常的处理效率比条件分支低.这个坑大家要注意了. 3.对大段代码进行 try-catch,这是不负责任的表现. catch 时请分清稳定代

源码分析七(java.lang包之IllegalArgumentException类)

一:IllegalArgumentException非法参数类,这个类继承父类RuntimeException 1 public 2 class IllegalArgumentException extends RuntimeException 重载的几个构造方法都是直接调用父类的构造方法: //无参数构造器,默认构造器 public IllegalArgumentException() { super(); } //参数为字符串String的构造器 public IllegalArgument

20155335俞昆《Java程序设计》第五周总结

#  20155335    <Java程序设计>第五周学习总结 ##  教材学习内容总结 ##  教材学习中的问题和解决过程 对于异常处理,程序中总有意想不到的状况所引发的的错误,Java中的错误也以对象方式呈现为Java.lang.Throwable的各种子类实例. 首先,Try和catch可用来捕捉程序中的错误,如果出现Java.util.InputMismatchExpection错误信息,表示不符合Scaneer对象预期,因为下一个字符串本身要代表数字,由Scaneer对象预期:使用

你的Java日志,有没有用这些改进办法

转自[http://mp.weixin.qq.com/s?__biz=MjM5MDE0Mjc4MA==&mid=207451012&idx=1&sn=de9fba4eda0f221363b6d5ae54243416&scene=2&from=timeline&isappinstalled=0#rd] 摘要:   在任何系统中,日志都是非常重要的组成部分,它是反映系统运行情况的重要依据,也是排查问题时的必要线索.绝大多数人都认可日志的重要性,但是又有多少人仔细

20145317彭垚 《Java程序设计》第5周学习总结

20145317彭垚 <Java程序设计>第5周学习总结 教材学习内容总结 第八章 8.1 语法与继承架构 package CH5; /** * Created by Administrator on 2016/3/29. */ import java.util.Scanner; public class Average { public static void main(String[] args) { Scanner console = new Scanner(System.in); do

20145129 《Java程序设计》第5周学习总结

20145129 <Java程序设计>第5周学习总结 教材学习内容总结 语法与继承架构 使用try.catch Java中所有错误都会被打包为对象,可以尝试(try)捕捉(catch)代表错误的对象后做一些处理. 运用try.catch,在错误发生时显示更友好的错误信息. 错误在捕捉处理后,尝试恢复程序正常执行流程. 异常继承架构 错误会被包装为对象,这些对象是可抛出的,因此设计错误对象都继承自java.lang.Throwable类. Throwable定义了取得错误信息堆栈追踪等方法,它有