java exception 记录_java Exception是什么时候记录堆栈信息的?

做了一些实验,目前看是会把

-> 异常处理当前桢里

-> 指定异常类的任意实例(可以不是被抛出的实例)

-> 的第一次引用操作(如:astore,aload,athrow,pop,pushstatic,getstatic)

-> 及递归其Subroutine调用链上的

-> 每一桢的第一次引用操作的 Excution Point,记录到堆栈元素数组里

根据原题代码做简单修改:

package playground;

class SysException extends Exception {

public static final SysException SYSTEM_EXCEPTION = new SysException(100001);

private int errorCode;

public SysException(int errorCode) {

this.errorCode = errorCode;

}

}

public class ExceptionTest {

static SysException bla() {

try {

new ExceptionTest().bla(123);

throw new SysException(131);

} catch (SysException e) {

return e;

}

}

private SysException bla(int x) {

return new SysException(x);

}

public static void main(String[] args) {

bla();

SysException ex = SysException.SYSTEM_EXCEPTION;

try {

test1();

} catch (Exception e) {

e.printStackTrace();

}

try {

test2();

} catch (Exception e) {

e.printStackTrace();

}

}

private static void test1() throws SysException {

throw SysException.SYSTEM_EXCEPTION;

}

private static void test2() throws SysException {

throw SysException.SYSTEM_EXCEPTION;

}

}

会有如下的输出结果

playground.SysException

at playground.SysException.(ExceptionTest.java:4)

at playground.ExceptionTest.bla(ExceptionTest.java:23)

at playground.ExceptionTest.bla(ExceptionTest.java:15)

at playground.ExceptionTest.main(ExceptionTest.java:27)

playground.SysException

at playground.SysException.(ExceptionTest.java:4)

at playground.ExceptionTest.bla(ExceptionTest.java:23)

at playground.ExceptionTest.bla(ExceptionTest.java:15)

at playground.ExceptionTest.main(ExceptionTest.java:27)

可尝试继续修改代码,观察输出(比如交换 15~16 行的实例)。

另外,可调用 e.fillInStackTrace() 来更新 private stackTrace

最后建议,除非有不关注堆栈的业务错误,避免使用单例异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值