黑马程序员技术交流社区
标题:
空指针异常
[打印本页]
作者:
白磊
时间:
2013-5-9 22:30
标题:
空指针异常
本帖最后由 白磊 于 2013-5-11 09:52 编辑
请问空指针异常一般怎么查找错误,错在哪里了,经常遇到这种错误,可是有些不太懂这个
作者:
zms2100
时间:
2013-5-9 22:37
通常是来讲是操作数组的时候才会吧,API给出的资料是:
当应用程序试图在需要对象的地方使用 null 时,抛出该异常。这种情况包括:
1、调用 null 对象的实例方法。
2、访问或修改 null 对象的字段。
3、将 null 作为一个数组,获得其长度。
4、将 null 作为一个数组,访问或修改其时间片。
5、将 null 作为 Throwable 值抛出。
作者:
刘学明
时间:
2013-5-9 22:40
本帖最后由 刘学明 于 2013-5-9 22:42 编辑
1.所谓的指针,就是java中的对象的引用。比如String s;这个s就是指针。
2.所谓的空指针,就是指针的内容为空,比如上面的s,如果令它指向null,就是空指针。
3.所谓的空指针异常,就是一个指针是空指针,你还要去操作它,既然它指向的是空对象,它就不能使用这个对象的方法。比如上面的s假如为null,你还要用s的方法,比如s.equals( String x);那么就会产生空指针异常。
空指针异常产生的主要原因如下:
(1) 当一个对象不存在时又调用其方法会产生异常
obj.method() // obj对象不存在时
(2) 当访问或修改一个对象不存在的字段时会产生异常
obj.method() // method方法不存在时
一般引用数据类型指向了null就是报此错误 指向null以后一定要用此引用进行初始化。
作者:
黑马-雷钊
时间:
2013-5-9 23:59
比如说你定义一个数组。
int[] arr= {1,2,3}
这样的数组运行是不会出现空指针异常的
顶多也就是角标越界。
但你这样定义就会了
int[] arr = new int[0];//因为这个中括号里写的是数组的长度。0长度就是没有长度。哪怕你用arr[0]调用一样出现空指针异常。
假如你数组定义的长度是6,
那么数组的角标排列是:
0,1,2,3,4,5
你数数。正好六个。
因为还有一个是0号角标。数组的角标就是从0号角标开始数的。
只要在调用数组的时候不要定义个6位数的数组还调用6号角标就行了。
因为它的最大角标就是5,还有一个角标是0.
再不懂回复我
作者:
ld5128702
时间:
2013-5-10 00:02
Java 空指针异常(java.lang.NullPointerException),顾名思义,即对象没有进行实例化便进行了使用。实例化的意义,就是将对象实例的地址赋值给对象符号。
比如 String a = new String();即在堆中将String的实例构造后,将地址赋值给a。 String a = “123”;即将常量池中的“123”这个对象实例的地址赋值给a。
引发空指针异常,往往是在获取对象实例地址的时候,由于获取的对象实例并不存在,因此返回的地址为null,而又没进行判断,直接使用了该对象实例(地址)引发的。
例如:
String userName = request.getParameter("username");
If (userName.equals("root"))
{....}
如果request中并不存在“username”字段,则自然getParameter返回的是null。而调用userName(为null)的equals会抛出异常。
小技巧:如果要把某个方法的返回值与常量做比较,把常量放在前面,可以避免调用null对象的equals方法。例如上述改成: "root".equals(userName);
因此,我们在进行对象实例地址的获取赋值的时候,在之后,要进行必要的判断。这种情况多发生在,查询数据库、从DTO对象中获取对象等中。
例如一个数据库查询对象DAO的使用: List<***> result = DAO.select(); 如需在result没有结果的时候进行错误处理,这需要包含两个判断: result为null或者result.size()为0。其业务意义分别是没有表和表中没有记录。即 : if(result == null || result.size() == 0){.......} ,注意,这里的result == null要在result.size() == 0之前才合理。否则会在没有表的时候,即result==null时,抛出空指针异常。
作者:
黄玉昆
时间:
2013-5-10 22:02
如果问题解决了,请将分类改为“已解决”,谢谢
作者:
白磊
时间:
2013-5-11 08:08
黄玉昆 发表于 2013-5-10 22:02
如果问题解决了,请将分类改为“已解决”,谢谢
这个我不会啊 不知道在哪里改呢
作者:
黄玉昆
时间:
2013-5-11 08:23
白磊 发表于 2013-5-11 08:08
这个我不会啊 不知道在哪里改呢
你可以看看这个帖子:
版主教你玩转论坛
帖子的沙发层,第2点结帖。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2