llnotice 2009-01-07 11:12
浏览 212
已采纳

如何保证底层方法中抛出的异常信息不断

如下所示测试代码,在test2中会抛出一个null point

private void test() {
try {
test2();
} catch (Exception e) {
e.printStackTrace();
}
}

private void test2() throws Exception {
try {
String str = null;
str.toString();
} catch (Exception e) {
e.printStackTrace();
throw new Exception("test exception" + e);
}
}

程序执行结果如下:
java.lang.NullPointerException
at integrate.test.Test.test2(Test.java:23)
at integrate.test.Test.test(Test.java:13)
at integrate.test.Test.main(Test.java:7)
java.lang.Exception: test exceptionjava.lang.NullPointerException
at integrate.test.Test.test2(Test.java:27)
at integrate.test.Test.test(Test.java:13)
at integrate.test.Test.main(Test.java:7)

通过test2中的e.printStackTrace();可以发现出现空指针的是str.toString();
但是重新抛出一个新异常,在test1中捕获时就只能定位到throw exception的位置了。无法实际定位到内部抛出异常的位置。

即使抛出一个带有throwable的重载方法的exception 也没有用。

这样的话在实际项目中就很难定位到真实错误的地方了
是否有什么好的方法

  • 写回答

2条回答 默认 最新

  • etank2011 2009-01-07 11:16
    关注

    使用
    [code="java"]
    new Exception("new message", e);
    [/code]
    这样堆栈信息可以一直传上去的

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面