2010-04-01 85 views
71

我正在通過套接字程序。其中,在catch塊中的IOException對象上調用printStackTrace
printStackTrace()實際上做了什麼?Java中printStackTrace()方法的用法是什麼?

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

我不知道它的目的。它是幹什麼用的?

+36

一個在現代IDE的最強大的功能是查找文件的能力(稱爲javadoc)給定的Java方法。在Eclipse中,當光標放在printStackTrace方法名上時,它是Shift-F2。 – 2010-04-01 13:36:07

+2

聽起來像你是Java的新手。這裏有一些東西可以閱讀:http://today.java.net/article/2006/04/04/exception-handling-antipatterns – TJR 2010-04-01 17:48:49

+0

你也可以閱讀printStackTrace()的代碼,看看它究竟做了什麼以及它是如何做的它。 – 2010-11-18 10:59:29

回答

81

prints the stack trace of the Exception to System.err

這是一個非常簡單但非常有用的診斷異常的工具。它會告訴你發生了什麼事以及在代碼中發生了什麼。

+1

並且感謝檢查的異常,它可能是#1內容'catch'塊:-) – Joey 2010-04-03 07:57:12

+1

@Joey或'拋出新的RuntimeException(e)' – 2011-07-19 08:16:06

13

它有助於追蹤異常。例如,您正在程序中編寫一些方法,並且您的某個方法會導致錯誤。然後printstack將幫助您確定哪種方法導致錯誤。堆棧會這樣的幫助:

首先你的主要方法將被調用並插入到堆棧中,然後第二個方法將被調用並以LIFO順序插入堆棧,並且如果在任何方法內部的任何地方發生任何錯誤,那麼這個堆棧將有助於確定該方法。

33

我是那種好奇這個也一樣,所以我只是把一個小樣本代碼,你可以看到它在做什麼:

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) 
+0

這是正常的,第一個調用錯誤的toString(),第二個請求打印所有的堆棧跟蹤從錯誤。這是2différents的東西。 – Jon 2016-05-17 08:08:08

+0

'System.err.println(e);'會更合適。 – roottraveller 2017-09-11 05:18:08

4

printStackTrace()打印在異常發生的源代碼,從而使誰寫的程序,看看什麼地方出錯了筆者的位置。但是由於它在源代碼中顯示出問題,因此可能或不可能具有任何編碼經驗的用戶可能無法理解哪裏出了問題,所以如果該程序允許用戶向作者發送錯誤消息,則用戶可能無法提供有關錯誤的良好數據。

你應該考慮Logger.getLogger()方法,它提供了一個更好的異常處理(日誌)設施,此外printStackTrace()不帶參數被認爲是過時的,應該只用於調試的目的,而不是爲用戶顯示。

10

printStackTrace()幫助程序員瞭解實際發生的問題。 printStacktrace()java.lang包中的類Throwable的一種方法。它在輸出控制檯中打印多行。 第一行由多個字符串組成。它包含Throwable子類的名稱&的包信息。 從第二行開始,它描述了以at開頭的錯誤位置/行號。

最後一行始終描述受錯誤/異常影響的目標。最後一行告訴我們關於從最後一行描述的行號轉移後控制進入的堆棧中的下一行。錯誤/異常代表堆棧形式的輸出,它們通過Throwable類的fillInStackTrace()方法輸入到堆棧中,該類本身將程序控制傳輸細節填充到執行堆棧中。從at開始的行不過是執行堆棧的值。 通過這種方式,程序員可以瞭解代碼中的實際問題。

隨着printStackTrace()方法,使用e.getmessage()是一個好主意。

+0

祝好運回答了一個5年的問題,並接受了答案,並且發起人應該查找引用而不是張貼到論壇。 – Javier 2015-08-01 16:59:01

+4

謝謝哈維爾。好像我還有一位讀者。 – 2015-08-01 18:48:49

+1

''post.readers ++;'' – 2015-12-16 12:27:20

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) 
2

printStackTrace()幫助程序員理解實際問題的發生位置。 printStackTrace()方法是java.lang包中類Throwable的成員。

0

printStackTraceThrowable類的一種方法。此方法在控制檯上顯示錯誤消息,我們在源代碼中獲取異常。這些方法可用於catch塊並描述:

  1. 異常的名稱。
  2. 異常說明。
  3. 我們在哪裏得到例外。

有三種方法描述控制檯中的printStackTrace是其中之一的異常。這三種方法是:

  1. printStackTrace()
  2. toString()
  3. 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()); 
     } 
    } 
} 
相關問題