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

     
     
     
  • 相关阅读:
    Java学习开篇
    《我的姐姐》
    世上本无事,庸人自扰之
    这48小时
    补觉
    淡定
    es java api 设置index mapping 报错 mapping source must be pairs of fieldnames and properties definition.
    java mongodb groupby分组查询
    linux 常用命令
    mongodb too many users are authenticated
  • 原文地址:https://www.cnblogs.com/klb561/p/10765684.html
Copyright © 2011-2022 走看看