空指针异常问题很常见,个人觉得有意义拿出谈谈,以下是我遇到异常:
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 怎么解决及出现原因?以及其他