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

时间:2010-04-01 12:46:12

标签: java exception-handling printstacktrace

我正在通过套接字程序。其中,在catch块中的printStackTrace对象上调用IOException printStackTrace()实际上做了什么?

catch(IOException ioe)
{
    ioe.printStackTrace();
}

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

10 个答案:

答案 0 :(得分:91)

这是Exceptionprints 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)

printStackTraceThrowable类的方法。此方法在控制台中显示错误消息;我们在源代码中获取异常的地方。这些方法可以与catch块一起使用,它们描述:

  1. 例外的名称。
  2. 例外说明。
  3. 源代码中的异常位置。
  4. 在控制台上描述异常的三种方法(其中printStackTrace就是其中之一)是:

    1. printStackTrace()
    2. toString()
    3. getMessage()
    4. 示例:

      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)

See image here

printStackTrace()告诉您在哪一行出错,为什么会出错。

示例:

 java.lang.ArithmeticException: / by zero
    at MinNumber.main(MinNumber.java:8)