Java中printStackTrace()方法的用途是什么?

Ven*_*kat 93 java exception-handling printstacktrace

我正在通过套接字程序.在其中,printStackTrace调用IOExceptioncatch块中的对象.
什么是printStackTrace()真正做到?

catch(IOException ioe)
{
    ioe.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

我不知道它的目的.它是干什么用的?

Joa*_*uer 95

它是一个Exception实例的方法,用于打印System.err实例的堆栈跟踪.

这是一个非常简单但非常有用的诊断异常的工具.它告诉你发生了什么以及代码发生在哪里.

以下是在实践中如何使用它的示例:

try {
    // ...
} catch (SomeException e) { 
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

  • 然而,它被认为是不好的做法,因为它不是线程安全的。使用 logger 语句并将其包含在那里。 (4认同)
  • @Joey或`throw new RuntimeException(e)` (3认同)
  • 并且由于检查了异常,它可能是`catch`块的第一内容:-) (2认同)

Jen*_*dal 40

我对此也很好奇,所以我只是将一些示例代码放在一起,你可以看到它在做什么:

try {
    throw new NullPointerException();
}
catch (NullPointerException e) {
    System.out.println(e);
}

try {
    throw new IOException();
}
catch (IOException e) {
    e.printStackTrace();
}
System.exit(0);
Run Code Online (Sandbox Code Playgroud)

致电println(e):

java.lang.NullPointerException

致电e.printStackTrace():

java.io.IOException
      at package.Test.main(Test.java:74)
Run Code Online (Sandbox Code Playgroud)

  • `System.err.println(e);` 会更合适。 (2认同)

小智 14

它有助于跟踪异常.例如,您正在程序中编写一些方法,并且您的一种方法会导致错误.然后printstack将帮助您确定导致错误的方法.Stack会有这样的帮助:

首先,您的main方法将被调用并插入到堆栈中,然后第二个方法将被调用并以LIFO顺序插入到堆栈中,如果在任何方法内某处发生任何错误,则此堆栈将有助于识别该方法.


Ash*_*ope 11

printStackTrace()帮助程序员了解实际问题发生的位置.printStacktrace()是一个包类Throwable的方法java.lang.它在输出控制台中打印几行.第一行由几个字符串组成.它包含Throwable子类的名称和包信息.从第二行开始,它描述了以错误位置/行号开头at.

最后一行始终描述受错误/异常影响的目标.最后一行告诉我们堆栈中的下一行,在从最后一行描述的行号转移之后控制进行.错误/异常表示堆栈形式的输出,它通过类的fillInStackTrace()方法提供给堆栈,Throwable类本身将程序控制传输细节填入执行堆栈.以...开头的行at只不过是执行堆栈的值.通过这种方式,程序员可以理解代码中实际问题的位置.

随着printStackTrace()方法,使用是一个好主意e.getmessage().


WIl*_*Ill 6

printStackTrace()打印源代码中发生异常的位置,从而允许编写程序的作者查看出错的地方.但由于它在源代码中显示出问题,可能有或没有任何编码经验的用户可能无法理解出错的地方,因此如果程序允许用户向作者发送错误消息,用户可能无法提供有关出错的良好数据.

您应该考虑该Logger.getLogger()方法,它提供了一个更好的异常处理(日志记录)工具,除了printStackTrace()没有参数被认为是过时的,应该只用于调试目的,而不是用户显示.