如何查找java.lang.NullPointerException的原因
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何查找java.lang.NullPointerException的原因相关的知识,希望对你有一定的参考价值。
找到报错代码的行号就可以了。空指针的原因最简单:对象没有实例化,没有new。 参考技术A 最近一段时间老遇到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路径;
如何实现数组的二分查找
二分查找是一种极其高效、简练的查找算法,它不仅简单,易用,而且还非常的高效。相对于顺序查找,二分查找在效率是呈现指数性提升,数据量越大,越能体现出二分查找法的优势。
二分查找的查找过程是:先确定待查找元素所在线性表的范围,然后逐步缩小范围直到找到(或找不到)该元素为止。
二分查找算法要求数据必须是有顺序的排序,即要么是升序排列,要么是降序排列。因此,在使用二分查找法前,需要将数组处理为有序数组。
案例说明
关键技术
利用do循环结构语法,每次循环时查找一个中间值,并判断是否是要找的内容,如果是则结束循环,否则修改中间值,继续查找,直到找到指定内容,或者查询完毕。
设计过程
步骤一
按照下图完成程序界面的搭建。
步骤二
首先,需要在代码区顶部声明一个全局数组arr(1000)
Option Explicit
Dim arr(1000) As Long
步骤三
然后,编写窗体加载的代码,在这里我们为arr数组赋予一个初始的内容。
Private Sub Form_Load()
Dim i As Long
'给数组分配内容
For i = 1 To 1000
i * 2 =
Next i
End Sub
步骤四
接着,我们编写查询按钮的代码。
Private Sub Command1_Click()
Dim low%, hight%, mid%
Dim flag As Boolean '是否查询到内容的标记
'给下标、上标和中间值初始值
low = 1
hight = 1000
mid = (low + hight) / 2
flag = False
'开始查找
Do While (flag = False And hight >= low)
If arr(mid) = Text1 Then
MsgBox "找到该数,下标为:" & mid
flag = True
Exit Do
ElseIf arr(mid) > Val(Text1) Then
hight = mid - 1
Else
low = mid + 1
End If
mid = (low + hight) / 2
DoEvents
Loop
If flag = False Then MsgBox "未查询到该数"
End Sub
步骤五
最后,我么来进行测试。运行程序,输入一个要查找的数值,然后点击查询按钮。
总结
数组在VB中具有非常非常重要的作用,对于处理数据具有绝对的优势,因此掌握数组的基本操作,尤其是增加、删除和插入以及查询都是相当重要的。小伙伴们一定要勤加练习哦。
友情提示:
以上是关于如何查找java.lang.NullPointerException的原因的主要内容,如果未能解决你的问题,请参考以下文章
springamqp 动态 Exchange Queue Failed to check/redeclare auto-delete queue(s).