zoukankan      html  css  js  c++  java
  • 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

     
     
     
  • 相关阅读:
    codeforces 732E(贪心)
    codeforces 732D(二分)
    codeforces 731C(DFS)
    codeforces 651C(map、去重)
    codeforces 723D(DFS)
    codeforces 721C (拓排 + DP)
    2018 Multi-University Training Contest 3
    2018 Multi-University Training Contest 2
    2018 Multi-University Training Contest 1
    The 2018 ACM-ICPC Chinese Collegiate Programming Contest
  • 原文地址:https://www.cnblogs.com/klb561/p/10765684.html
Copyright © 2011-2022 走看看