在Java中使用e.printStackTrace()的ioexception
这可能是个新手问题,但希望你能帮助我。:)我有这样的想法:
try
{
//try to do something there
}
catch (IOException e)
{
//handle the exception
e.printStackTrace();
}
我使用的是NetBeans IDE,出于某种原因,printStackTrace在一条弯曲的线条中加了下划线。当我按Alt+Enter时,它显示为Throwable。应删除printStackTrace()。这是什么意思?有谁能更深入地了解这可能意味着什么?或者我可以忽略这个
谢谢
# 1 楼答案
这不是一个好的做法,因为它打印在默认的错误流中,大多数情况下是控制台
NetBeans应该提醒你这一点。关于它的良好实践是记录消息。遵循相同的参考:
http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html
编辑 更多信息请参见下面的第一条评论
# 2 楼答案
试试看:
# 3 楼答案
仅仅打印堆栈跟踪是不够的。打印异常的堆栈跟踪本身并不意味着这是完全不好的做法,但在异常发生时只打印堆栈跟踪是一个问题
始终记录异常(使用良好的logging framework),但不要向最终用户公开它们。并确保仅在开发模式下显示堆栈跟踪
我自己(大部分时间)使用
logger.log(Level.SEVERE, <exception>.getMessage(), <exception>);
当netbeans建议您处理异常“
Surround Statement with try-catch
”时,如果您单击该选项,它将生成:这比
ex.printStackTrace();
好这些可能有助于:
# 4 楼答案
这只是一个建议。在eclipse中,这很好——我相信这只是IDE告诉您有更多的常规方法来实现它,就像其他一些答案一样。 我发现,使用调试模式(比如控制台开关-d)收集这些日志对调试很有用,并且应该告诉用户何时会发生致命错误
# 5 楼答案
这可能是因为
printStackTrace()
实际上并没有像在控制台中转储堆栈那样处理错误。它充当占位符,直到用正确的错误处理(如果需要的话)替换它,并用某种记录器替换输出