java中的getStackTrace和printStackTrace的區別


 getStackTrace()返回的是通過getOurStackTrace方法獲取的StackTraceElement[]數組,而這個StackTraceElement是ERROR的每一個cause by的信息。

   printStackTrace()返回的是一個void值,但是可以看到其方法內部將當前傳入打印流鎖住,然后同樣通過getOurStackTrace方法獲取的StackTraceElement[]數組,只不過printStackTrace()方法直接打印出來了。而getStackTrace()則是得到數組,使用者可以根據自己的需求去得到打印信息,相比printStackTrace()會更細一些。

e.printStackTrace()

try{ 
BufferedReader input=new BufferedReader(new InputStreamReader(System.in));
String inputLine=input.readline();
int i=Integer.parseInt(inputLine).intValue();
}
catch(Exception e){
e.printStackTrace() ;
}

在后面加e.printStackTrace() ;是為什么?

catch(Exception e){
e.printStackTrace() ;
}
當try語句中出現異常是時,會執行catch中的語句,java運行時系統會自動將catch括號中的Exception e 初始化,也就是實例化Exception類型的對象。e是此對象引用名稱。然后e(引用)會自動調用Exception類中指定的方法,也就出現了e.printStackTrace() ;。
printStackTrace()方法的意思是:在命令行打印異常信息在程序中出錯的位置及原因。(這是白話解釋,比較容易理解)

========================================================================================================

在捕獲異常的時候,大家都可能要用到這樣的一條語句:e.printStackTrace();

e是Throwable的實例異常對象,用在catch語句中,相當於一個形參,一旦try捕獲到了異常,那么就將這個異常信息交給e,由e處理,printStackTrace()是異常類的一個方法。與它重載的方法還有printStackTrace(PrintStream s) 和printStackTrace(PrintWriter s)。

在Throwable類中printStackTrace()內部是這樣執行的:

public void printStackTrace() {
        printStackTrace(System.err);

}

它調用了printStackTrace(PrintStream s)方法。err是System類當中的一個靜態PrintStream類型字段。所以它能傳遞進去。

 

public void printStackTrace()將此 throwable 及其追蹤輸出至標准錯誤流。此方法將此 Throwable 對象的堆棧跟蹤輸出至錯誤輸出流,作為字段 System.err 的值。輸出的第一行包含此對象的 toString() 方法的結果。剩余行表示以前由方法 fillInStackTrace() 記錄的數據。此信息的格式取決於實現,但以下示例是最常見的:
java.lang.NullPointerException
         at MyClass.mash(MyClass.java:9)
         at MyClass.crunch(MyClass.java:6)
         at MyClass.main(MyClass.java:3)
本示例通過運行以下程序生成:
class MyClass {
     public static void main(String[] args) {
         crunch(null);
     }
     static void crunch(int[] a) {
         mash(a);
     }
     static void mash(int[] b) {
         System.out.println(b[0]);
     }
}

 

還有就是,
catch(Exception e){ e.printStackTrace() ; } 當try語句中出現異常是時,會執行catch中的語句,java運行時系統會自動將catch括號中的Exception e 初始化,
也就是實例化Exception類型的對象。e是此對象引用名稱。然后e(引用)會自動調用Exception類中指定的方法,
也就出現了e.printStackTrace() ;。 printStackTrace()方法的意思是:
在命令行打印異常信息在程序中出錯的位置及原因。(這是白話解釋,比較容易理解)

 

    java拋出異常的方法有很多,其中最常用的兩個:
    System.out.println(e),這個方法打印出異常,並且輸出在哪里出現的異常,不過它和另外一個e.printStackTrace()方法不同。后者也是打印出異常,但是它還將顯示出更深的調用信息。
    比如說:
A   extends --->   B   extends  ----> C
  當在創建A的過程中出現問題了,我們拋出異常。
   System.out.println(e),除了標准異常外,只打印at A 然后再向外層層輸出。
   e.printStackTrace(),除了標准異常外,打印 
at   C
at   B
at   A
.......再向外層調查。 
在向外層調查的情況下,都一樣。最后都會回到com.sun.midp.main.Main.main

 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM