异常之java.lang.nullpointerexception 怎么解决及出现原因?

空指针异常问题很常见,个人觉得有意义拿出谈谈,以下是我遇到异常:

HTTP Status 500 – Internal Server Error


Type Exception Report

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

java.lang.NullPointerException
	org.apache.catalina.connector.CoyoteWriter.write(CoyoteWriter.java:180)
	com.kaikeba.mvc.DispatcherServlet.service(DispatcherServlet.java:42)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	com.e.filter.CharSetFilter.doFilter(CharSetFilter.java:16)

Note The full stack trace of the root cause is available in the server logs.


Apache Tomcat/9.0.13

解决方法:定位到报空指针异常的这一行代码,找到有"." 即有点的地方,任何有"."点的地方,都有可能报空指针异常。

调用任何对象的属性和方法都有可能会报空指针异常,下面举例说明。

假设ob是一个对象,没有初始化的时候

ob.属性,ob.方法,都是会报java.lang.nullpointerexception空指针异常的。

正确的方法如下:

Object ob=new Object();

ob.toString;

这才是正确的打开方式。

如果报错的代码包含多个"."点如何处理?

一个一个“点”去分析。

比如 xxx.yy.zz , 这个代码你要逐步去判断,xxx是不是可能为空,xxx不为空的情况下,再判断yy是不是为空。

点击绿色的报错提示,这就是你报空指针异常的代码位置,在150,点击打开,找到对应的这一行代码,逐个分析有点"."的地方。这是排查空指针异常的关键。

如何避免空指针异常?

使用一个对象前先判断是否为空,if(xxx!=null)再进行下一步的操作。

equal方法的时候,把不为空的放前面,比如 "xxx".equals(Test),字符串"xxx"是不可能为空的,错误的写法为: Test.equals("xxx"),这个时候Test为空的时候,就有可能抛空指针异常。

总结一下空指针异常抛出的几个场景:

1、字符串变量未初始化

2、接口类型的对象没有用具体的类初始化,比如:

Object ob // 会报错

Object ob = new Object(); //则不会报错了

3、当一个对象的值为空时,你没有判断为空的情况。

4、字符串与文字的比较,文字可以是一个字符串或Enum的元素,如下会出现异常

String str = null;

if(str.equals(“Test”)){}

正确的写法应:if("Test".equals(str)){}

5、优先使用String.valueOf()方法代替toString()

当程序代码需要对象的字符串表示形式时,请避免使用该对象的toString方法。如果你的对象的引用等于null,NullPointerException则会抛出,使用静态String.valueOf方法,该方法不会抛出任何异常并打印"null"

6、class被声明了类型, 默认 class = null; 这样在调用class中方法的时候系统只能给你个空指针异常, 给其实例化就好了:class = new Class();

7、返回null,方法的返回值不要定义成为一般的类型,而是用数组。这样如果想要返回null的时候就能避免许多不必要的NullPointerException

8、调用null对象的实例方法。

9、访问或修改null对象的字段。

10、把长度null当作一个数组。

11、像访问或修改null阵列一样访问或修改插槽。

12、service方法引用注解的,有可能没有写注解(这个问题以前没有用代码模板工具经常出现);

13、mapper文件的dao路径引用路径写错。

14、sql语句写错,(这个问题你在写sql语句的时候应该跑一下看看有没有错误,我觉得很有必要)

java语言设计此异常来指示null对象的其他非法使用。 你看懂了吗?java.lang.nullpointerexception空指针异常是java开发中最容易遇到的一个异常,也是最容易排查的一个异常。

转载于java.lang.nullpointerexception 怎么解决及出现原因?以及其他

你可能感兴趣的:(Java)