我正在通过一个套接字程序。在其中,在 catch 块中printStackTrace
的对象上调用。
实际上是做什么的?IOException
printStackTrace()
catch(IOException ioe)
{
ioe.printStackTrace();
}
我不知道它的目的。它是干什么用的?
我正在通过一个套接字程序。在其中,在 catch 块中printStackTrace
的对象上调用。
实际上是做什么的?IOException
printStackTrace()
catch(IOException ioe)
{
ioe.printStackTrace();
}
我不知道它的目的。它是干什么用的?
它是实例上的一种方法,将Exception
实例的堆栈跟踪打印到System.err
.
这是一个非常简单但非常有用的异常诊断工具。它告诉您发生了什么以及发生在代码中的什么位置。
以下是如何在实践中使用它的示例:
try {
// ...
} catch (SomeException e) {
e.printStackTrace();
}
请注意,在“严肃的生产代码”中,您通常不希望这样做,原因有多种(例如System.out
不太有用且不是线程安全的)。在这些情况下,您通常会使用一些日志框架,该框架使用类似log.error("Error during frobnication", e);
.
我也对此有点好奇,所以我只是整理了一个小示例代码,您可以在其中看到它在做什么:
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)
它有助于跟踪异常。例如,您正在程序中编写一些方法,而您的方法之一会导致错误。然后 printstack 将帮助您识别导致错误的方法。堆栈将像这样提供帮助:
首先将调用您的 main 方法并将其插入堆栈,然后将调用第二个方法并以 LIFO 顺序将其插入堆栈,如果任何方法内部某处发生任何错误,则此堆栈将有助于识别该方法。
printStackTrace()
帮助程序员了解实际问题发生在哪里。是包printStacktrace()
类Throwable
的方法。java.lang
它在输出控制台中打印几行。第一行由几个字符串组成。它包含 Throwable 子类的名称和包信息。从第二行开始,它描述了以 . 开头的错误位置/行号at
。
最后一行总是描述受错误/异常影响的目的地。倒数第二行告诉我们堆栈中的下一行,在从最后一行中描述的行号进行传输后,控件将进入何处。fillInStackTrace()
错误/异常以堆栈的形式表示输出,通过类的方法将其送入堆栈,Throwable
该类本身将程序控制传输详细信息填充到执行堆栈中。以 ,开头的行at
只是执行堆栈的值。通过这种方式,程序员可以了解代码中实际问题的位置。
除了printStackTrace()
方法,使用e.getmessage()
.
printStackTrace()
打印源代码中发生异常的位置,从而让编写程序的作者看到哪里出了问题。但是由于它在源代码中显示了问题,可能有或可能没有任何编码经验的用户可能无法理解出了什么问题,所以如果程序允许用户向作者发送错误消息,用户可能无法提供有关问题所在的良好数据。
您应该考虑该Logger.getLogger()
方法,它提供了更好的异常处理(日志记录)工具,而且printStackTrace()
没有参数被认为是过时的,并且应该只用于调试目的,而不是用于用户显示。
这printStackTrace()
有助于程序员了解实际问题发生在哪里。该printStackTrace()
方法是包中类Throwable
的成员。java.lang
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());
}
}
}
printStackTrace() 帮助程序员了解实际问题发生在哪里。它有助于跟踪异常。它是每个异常类继承的 Throwable 类的 printStackTrace() 方法。此方法打印 e 对象的相同消息以及发生异常的行号。
下面是 Java 中异常打印堆栈的另一个例子。
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)
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)