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

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

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

输出信息如下:

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()方法得到的结果。简单说就是会打印出具体错误信息,包含发生异常的代码位置、异常类型等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值