Java:捕获异常时printStackTrace()、toString()、getMessage()、getCause等方法的区别

    今日有同事和我交流Java异常捕获时几种信息输出方法的区别,其实我感觉对于这种Java SDK中封装的方法,想弄明白最好的办法就是先看源码(解释都很详细到位),然后再自己写个测试用例看效果。不过既然今天有被问到,就一块写个博客简单供遇到此疑问的其他小伙伴分享下个人所知。

首先贴一下测试代码,很简单,就是造了个空指针异常:

Java:捕获异常时printStackTrace()、toString()、getMessage()、getCause等方法的区别_第1张图片

输出信息如下:

I/speech_MainActivity: printStackTraceStart

//printStackTrace()方法输出
W/System.err: java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference
        at com.example.exceptiontest.MainActivity.catchTest(MainActivity.java:111)
        at com.example.exceptiontest.MainActivity$2.run(MainActivity.java:80)
        at java.lang.Thread.run(Thread.java:818)
I/speech_MainActivity: printStackTraceEnd

//toString()方法输出
    exceptionToString:java.lang.NullPointerException: Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference

//getMessage()方法输出
    exceptionMessage:Attempt to invoke virtual method 'byte[] java.lang.String.getBytes()' on a null object reference

//getCause()方法输出

exceptionCause:null

根据以上输出结果及SDK源码注释,几个方法的作用分别如下:

(1)toString()

    输出异常类型、错误信息。

(2)getCause()

    返回此可抛出事件的原因,如果原因不存在或未知,则返回null。

(3)getMessage()

    输出错误信息。

(4)printStackTrace()

    这个方法打印的最全, 它会在错误输出流上将此{@code Throwable}对象的堆栈跟踪具体信息打印出来。 输出的第一行便是使用此对象利用toString()方法得到的结果。简单说就是会打印出具体错误信息,包含发生异常的代码位置、异常类型等。

你可能感兴趣的:(java,exception)