28
为什么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 …