异常之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 怎么解决及出现原因?以及其他

posted @   所遇所思  阅读(49)  评论(0编辑  收藏  举报  
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
🔑
点击右上角即可分享
微信分享提示
  1. 1 404 not found REOL
  2. 2 偏爱 张芸京
  3. 3 Glimpse of Us Joji
偏爱 - 张芸京
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : 葛大为

作曲 : 陈伟

编曲 : 陈伟

把昨天都作废

现在你在我眼前

我想爱 请给我机会

如果我错了也承担

认定你就是答案

我不怕谁嘲笑我极端

相信自己的直觉

相信自己的直觉

顽固的人不喊累

爱上你 我不撤退

我说过 我不闪躲

我说过 我不闪躲

我非要这么做

讲不听 也偏要爱

更努力爱 让你明白

没有别条路能走

你决定要不要陪我

讲不听 偏爱

靠我感觉爱

等你的依赖

对你偏爱

痛也很愉快

把昨天都作废

把昨天都作废

现在你在我眼前

我想爱 请给我机会

如果我错了也承担

认定你就是答案

我不怕谁嘲笑我极端

相信自己的直觉

相信自己的直觉

顽固的人不喊累

爱上你 我不撤退

我说过 我不闪躲

我说过 我不闪躲

我非要这么做

讲不听 也偏要爱

更努力爱 让你明白

没有别条路能走

你决定要不要陪我

讲不听 偏爱

靠我感觉爱

等你的依赖

不后悔 有把握

不后悔 有把握

我不闪躲 我非要这么做

讲不听 也偏要爱

更努力爱 让你明白

没有别条路能走

你决定要不要陪我

讲不听 偏爱

靠我感觉爱

等你的依赖

对你偏爱 爱

痛也很愉快