如何查找java.lang.NullPointerException的原因

 我来答
就烦条0o
2017-04-09 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46485
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
最近一段时间老遇到NullPointerException这个异常,于是上网找了一些关于这方面的资料,也解决了问题,在这特意做个总结:
一般报java.lang.NullPointerException的原因有以下几种:
·1.字符串变量未初始化;
·2.接口类型的对象没有用具体的类初始化,比如:
List lt; 会报错
List lt = new ArrayList(); 则不会报错了
·3.当一个对象的值为空时,你没有判断为空的情况。
之前获取类路径下的资源的时候就报了这个错(当然这个也是因为我不太熟悉用Class和ClassLoader来获取类路径下的资源。)
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1049)
at org.apache.commons.io.IOUtils.toString(IOUtils.java:359)
at in.itcast.servlet.Eservlet.doGet(Eservlet.java:33)
我的代码最初是这样的:(test.txt和当前这个类在同一个目录下)
[java] view plain copy
<span style="white-space:pre"> </span>ClassLoader c = this.getClass().getClassLoader();
InputStream in = c.getResourceAsStream("test.txt");
String s = IOUtils.toString(in);
System.out.println(s);
出了异常之后,当时也找不到是哪里出现空指针了,在网上进行了一顿摸索之后,原来这样可以查找出某个对象是否为空,而且通常都要加上这个判断:
[java] view plain copy
<span style="white-space:pre"> </span>ClassLoader c = this.getClass().getClassLoader();
InputStream in = c.getResourceAsStream("test.txt");
if(in!=null){
String s = IOUtils.toString(in);
System.out.println(s);
}else{
System.out.println("null");
}
于是我找到了这个错误所在,原来是路径写错了。。。
Class类的getResourceAsStream(Stringpath):
1.路径以“/”开头,相对classes路径;
2.路径不以“/”开头,相对当前class文件所有路径,例如在cn.itcast.servlet.MyServlet中执行,那么相对/classes/cn/itcast/servlet/路径;
ClassLoader类的getResourceAsStream(Stringpath):
相对classes路径;
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式