我以前从来没有认真编写过 Java 代码,但是我基于我现有的技能(Delphi & C #)学习了语法、库和概念。有一件事我很难理解,那就是我看到过太多的代码在 printStackTrace
之后默默地消耗异常,就像下面这样:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
}
}
在我遇到的几乎每篇 Java 文章和项目中都有类似的代码。据我所知,这是非常糟糕的。例外情况几乎总是应该这样转到外部环境:
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
e.printStackTrace();
throw new AssertionError(e);
}
}
大多数情况下,异常最终应该在属于底层框架的最外层循环中处理(例如 JavaSwing)。为什么这样的代码在 Java 世界中看起来是标准的呢?我很困惑。
基于我的背景,我希望删除 printStackTrace 完全相信。我只需要重新抛出一个未处理的 RuntimeException
(或者更好的 AssertionError
) ,然后在最适当的位置捕获并记录它: 框架最外层的循环。
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}