我正在通过套接字程序。其中,在catch块中的printStackTrace
对象上调用IOException
printStackTrace()
实际上做了什么?
catch(IOException ioe)
{
ioe.printStackTrace();
}
我不知道它的目的。它是干什么用的?
答案 0 :(得分:91)
这是Exception
个prints the stack trace of the instance to System.err
实例的方法。
这是一个非常简单但非常有用的诊断异常的工具。它告诉你发生了什么以及代码发生在哪里。
以下是在实践中如何使用它的示例:
try {
// ...
} catch (SomeException e) {
e.printStackTrace();
}
答案 1 :(得分:38)
我对此也很好奇,所以我只是把一些示例代码放在一起,你可以看到它在做什么:
try {
throw new NullPointerException();
}
catch (NullPointerException e) {
System.out.println(e);
}
try {
throw new IOException();
}
catch (IOException e) {
e.printStackTrace();
}
System.exit(0);
致电println(e)
:
java.lang.NullPointerException
致电e.printStackTrace()
:
java.io.IOException at package.Test.main(Test.java:74)
答案 2 :(得分:14)
有助于跟踪异常。例如,您正在程序中编写一些方法,并且您的一种方法会导致错误。然后printstack将帮助您确定导致错误的方法。 Stack会有这样的帮助:
首先调用main方法并将其插入到堆栈中,然后调用第二个方法并以LIFO顺序插入堆栈,如果在任何方法内某处发生任何错误,则此堆栈将有助于识别该方法。 / p>
答案 3 :(得分:10)
printStackTrace()
帮助程序员了解实际问题发生的位置。 printStacktrace()
是Throwable
包的java.lang
类的方法。它在输出控制台中打印几行。
第一行由几个字符串组成。它包含Throwable子类的名称&包裹信息。
从第二行开始,它描述了以at
开头的错误位置/行号。
最后一行始终描述受错误/异常影响的目标。最后一行告诉我们堆栈中的下一行,在从最后一行描述的行号转移之后控制进行。错误/异常表示堆栈形式的输出,它通过fillInStackTrace()
类的Throwable
方法提供给堆栈,该方法本身将程序控制传输细节填入执行堆栈。以at
开头的行只不过是执行堆栈的值。
通过这种方式,程序员可以理解代码中实际问题的位置。
使用printStackTrace()
方法时,最好使用e.getmessage()
。
答案 4 :(得分:5)
printStackTrace()
打印源代码中发生异常的位置,从而允许编写程序的作者查看出错的地方。但由于它在源代码中显示出问题,可能有或没有任何编码经验的用户可能无法理解出错的地方,因此如果程序允许用户向作者发送错误消息,用户可能无法提供有关出错的良好数据。
你应该考虑Logger.getLogger()
方法,它提供了一个更好的异常处理(日志记录)工具,除了printStackTrace()
之外没有参数被认为是过时的,只能用于调试目的,而不是用于用户显示。
答案 5 :(得分:2)
printStackTrace()
帮助程序员了解实际问题发生的位置。 printStackTrace()
方法是Throwable
包中类java.lang
的成员。
答案 6 :(得分:1)
printStackTrace
是Throwable
类的方法。此方法在控制台中显示错误消息;我们在源代码中获取异常的地方。这些方法可以与catch块一起使用,它们描述:
在控制台上描述异常的三种方法(其中printStackTrace就是其中之一)是:
printStackTrace()
toString()
getMessage()
示例:
public class BabluGope {
public static void main(String[] args) {
try {
System.out.println(10/0);
} catch (ArithmeticException e) {
e.printStackTrace();
// System.err.println(e.toString());
//System.err.println(e.getMessage());
}
}
}
答案 7 :(得分:0)
Java中e.printStackTrace()方法的用途是什么?
嗯,使用这种方法e.printStackTrace();
的目的是看看究竟是什么错误。
例如,我们想要处理异常。让我们看看下面的例子。
public class Main{
public static void main(String[] args) {
int a = 12;
int b = 2;
try {
int result = a / (b - 2);
System.out.println(result);
}
catch (Exception e)
{
System.out.println("Error: " + e.getMessage());
e.printStackTrace();
}
}
}
我已经使用方法e.printStackTrace();
来准确显示错误。
在输出中,我们可以看到以下结果。
Error: / by zero
java.lang.ArithmeticException: / by zero
at Main.main(Main.java:10)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
答案 8 :(得分:0)
printStackTrace()帮助程序员了解实际问题发生的位置。它有助于跟踪异常。 这是每个异常类都继承的Throwable类的printStackTrace()方法。此方法将打印与e对象相同的消息以及发生异常的行号。
以下是Java中Exception的打印堆栈的另一个示例。
public class Demo {
public static void main(String[] args) {
try {
ExceptionFunc();
} catch(Throwable e) {
e.printStackTrace();
}
}
public static void ExceptionFunc() throws Throwable {
Throwable t = new Throwable("This is new Exception in Java...");
StackTraceElement[] trace = new StackTraceElement[] {
new StackTraceElement("ClassName","methodName","fileName",5)
};
t.setStackTrace(trace);
throw t;
}
}
java.lang.Throwable:这是Java中的新异常... 在ClassName.methodName(fileName:5)
答案 9 :(得分:-1)
printStackTrace()
告诉您在哪一行出错,为什么会出错。
示例:
java.lang.ArithmeticException: / by zero
at MinNumber.main(MinNumber.java:8)