java报null_Java报异常时getMessage()⽅法返回null
有次在查看项⽬⽇志的时候发现getMessage()返回值是null,以为是代码写的有问题,后来发现空指针异常时返回值就是null,虽然问题原
因找到,但是感觉在⽇志中单单输出null对我们查看⽇志不够友好,想找到⼀种更好的⽅式。
原因
翻阅了API后发现getMessage()是Throwable类提供的⽅法
getMessage
publicStringgetMessage()
Returnsthedetailmessagestringofthisthrowable.
Returns:
thedetailmessagestringofthisThrowableinstance(whichmaybenull).
翻译过来的意思⼤概是:返回当前抛出的Trowable实例的详细信息(可能会是null)
从API中的说明可以得知,我们getMessage()得到的是null也不⾜为奇了,博主常遇见的null情况是空指针异常,具体是否还有其他的异常
情况会得到null的也还不太清楚,看了其他博主的⽂章发现是会有其他异常也返回null的情况。
那么是否有更好的办法可以让我们知道输出错误是什么呢,答案是肯定的,在经过⼀番查找后发现有以下两种更好的⽅式:
使⽤Exception的printStackTrace()⽅法
使⽤Exception的toString()⽅法
区别
对⽐出现空指针异常时的区别
printStackTrace
当出现空指针异常时,会输出异常类型和异常代码所在的⾏数,在我们的代码量多起来以后,会出现⼀个类调⽤另⼀个类,报异常时会将每
个报错的⾏都输出,当调⽤关系复杂起来的时候会输出⼀长串内容。
//没有其他类调⽤时
interException
(:12)
//其他类或⽅法调⽤时
interException
(:11)
(:6)
toString
查看了jdk的源码后发现NullPointerException本⾝没有实现toString()函数,⽽是通过继承使⽤Throwable的toString()函数,该函数会先
获取detailMessage的值(出现空指针异常时Throwable类的detailMessage为null,因此直接调⽤getMessage()⽅法会返回null),如果为
空返回当前异常类名,否则返回detailMessage,所以即使是空指针异常也会返回interException
/***Returnsashortdescriptionofthisthrowable.
*Theresultistheconcatenationof:
*
*
the{@linkplainClass#getName()name}oftheclassofthisobject
*
":"(acolonandaspace)
*
theresultofinvokingthisobject's{@link#getLocalizedMessage}
*method
*
*If{@codegetLocalizedMessage}returns{@codenull},thenjust
*theclassnameisreturned.
*
*@returnastringreprentationofthisthrowable.*/
publicStringtoString(){
Strings=getClass().getName();
Stringmessage=getLocalizedMessage();return(message!=null)?(s+":"+message):s;
}/***Createsalocalizeddescriptionofthisthrowable.
*Subclassmayoverridethismethodinordertoproducea
*classthatdonotoverridethis
*method,thedefaultimplementationreturnsthesameresultas
*{@codegetMessage()}.
*
*@returnThelocalizeddescriptionofthisthrowable.
*@sinceJDK1.1*/
publicStringgetLocalizedMessage(){returngetMessage();
}/***Returnsthedetailmessagestringofthisthrowable.
*
*@returnthedetailmessagestringofthis{@codeThrowable}instance
*(whichmaybe{@codenull}).*/
publicStringgetMessage(){returndetailMessage;
}
结论
仅需要知道返回的异常类型时使⽤Exception的toString()⽅法,需要知道报错详情则使⽤Exception的printStackTrace()⽅法。
才疏学浅,如⽂中有错误,感谢⼤家指出。
本文发布于:2022-12-27 21:28:05,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/42736.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |