为什么 Java 人员经常默默地使用异常?
我以前从未做过任何严肃的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);
}
}
大多数时候,异常最终应该在属于底层框架的最外层循环(例如Java Swing)中处理。为什么在Java世界中编写这样的代码看起来像是常态?我很困惑。
根据我的背景,我宁愿完全删除printStackTrace。我会简单地将其作为未处理的 aka(或者,甚至更好)重新抛出,然后在最合适的位置捕获并记录它:框架最外层的循环。RuntimeException
AssertionError
public void process() {
try {
System.out.println("test");
} catch(Exception e) {
throw new AssertionError(e);
}
}