null什么意思

更新时间:2022-12-27 21:28:05 阅读: 评论:0


2022年12月27日发(作者:sabina)

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 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图