在Java中使用e.printStackTrace()
这可能是一个新手问题,但希望你能帮助我。 :)我有这样的事情:
try { //try to do something there } catch (IOException e) { //handle the exception e.printStackTrace(); }
我正在使用NetBeans IDE,出于某种原因,printStackTrace在一条波浪线中被加下划线。 当我按下Alt + Enter,它说Throwable.printStackTrace()应该被删除。 这是什么意思? 任何人都可以提供更多的见解,这可能是什么意思 还是我可以忽略这个?
谢谢!
这只是一个build议。 在日食中它是好的 – 我相信这只是IDE告诉你,有更多的传统方法来做到这一点,就像其他的一些答案。 我发现它对于debugging是有用的,而且你应该告诉用户什么时候会发生致命错误,使用debugging模式(如控制台开关-d)来收集这些日志。
尝试:
e.printStackTrace(System.out);
这可能是因为printStackTrace()
并没有真正处理错误,因为它只是在控制台中转储堆栈。 它作为一个占位符,直到你用适当的error handling(如果需要的话)replace它,并用某种types的logging器replace输出。
e.printStackTrace();
是不是很好的做法,因为它打印在默认的ErrorStream,大部分时间是控制台!
NetBeans应该警告你。 关于它的好习惯是logging信息。 遵循相同的参考:
http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
编辑看到第一个评论以下更多的信息。
只是打印堆栈跟踪是不够的。 打印exception的堆栈跟踪本身并不意味着它是完全不好的做法,但是当发生exception时仅打印堆栈跟踪是一个问题。
总是loggingexception(使用良好的日志框架 ),但不要将它们暴露给最终用户。 并确保只在开发模式下显示堆栈跟踪。
我自己使用(大部分时间) logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);
。
当netbeansbuild议你Surround Statement with try-catch
”来处理exception的“ Surround Statement with try-catch
”,如果你点击它,它将会生成):
try { //something need to be handle(exception that throw) } catch (SQLException ex) { Logger.getLogger(ClassName.class.getName()).log(Level.SEVERE, null, ex); }
哪个比ex.printStackTrace();
更好ex.printStackTrace();
。
这些可能有助于:
- exception处理的最佳实践
- Javarevisited-logging的 。
- Java日志框架中的最新选项是什么?
- 基准testingJava日志框架。