什么是空指针异常

日常开发过程中,最常见的异常莫过于NullPointerException,之前的时候,只是知道去找到报错的位置,然后去解决它,最近有空学习C语言,就去深究了下NullPointerException异常的本质。

发生NullPointerException的情况:

调用 null 对象的实例方法。
访问或修改 null 对象的字段。
如果一个数组为null,试图用属性length获得其长度时。
如果一个数组为null,试图访问或修改其中某个元素时。
在需要抛出一个异常对象,而该对象为 null 时。

首先,我们先找到java.lang.NullPointerException这个类,内容很简单:

package java.lang;

/**
 * Thrown when a program tries to access a field or method of an object or an
 * element of an array when there is no instance or array to use, that is if the
 * object or array points to {@code null}. It also occurs in some other, less
 * obvious circumstances, like a {@code throw e} statement where the {@link
 * Throwable} reference is {@code null}.
 */
public class NullPointerException extends RuntimeException {

    private static final long serialVersionUID = 5162710183389028792L;

    /**
     * Constructs a new {@code NullPointerException} that includes the current
     * stack trace.
     */
    public NullPointerException() {
    }

    /**
     * Constructs a new {@code NullPointerException} with the current stack
     * trace and the specified detail message.
     *
     * @param detailMessage
     *            the detail message for this exception.
     */
    public NullPointerException(String detailMessage) {
        super(detailMessage);
    }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

NullPointerException翻译过来便是空指针,接下来我们首先要了解的是什么是指针,对于非C/C++的程序员来说,很多其它语言开发者对指针的概念很模糊,说白了,指针就是存储变量的内存地址,在C语言里面,NULL表示该指针不指向任何内存单元,0表示指向地址为0的单元(这个单元一般是不能使用的)。先看一段C语言代码:

void main() {
    int* i = NULL;
    printf("%#x\n", i);
    printf("%#x\n", &i);
    system("pause");
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在C语言里,你可以读取NULL本身的值(void *)0,即0,但是读取它指向的值,那是非法的,会引发段错误。而Java里面的NULL就是直接指向了0,上述也说了,指向地址为0的单元,一般是不能使用的。

一句话总结:因为指向了不可使用的内存单元,虚拟机无法读取它的值,最终导致NullPointerException。

http://blog.csdn.net/pangpang123654/article/details/52370669

时间: 2024-10-11 14:31:09

什么是空指针异常的相关文章

框架-@Autowired注入为null,空指针异常。

问题描述 @Autowired注入为null,空指针异常. Spring mvc + hibernate 的框架中,在非Controller下使用@Autowired注入失败,空指针异常.配置文件中已经加入了如下的内容 <!-- 使用annotation 自动注册bean并保证@Required@Autowired的属性被注入 --> /context:component-scanService类:@Service(""realtimeDataService"&q

报空指针异常,但是我debug到对象是有值的,执行查询方法就报错,错误信息如下:

问题描述 报空指针异常,但是我debug到对象是有值的,执行查询方法就报错,错误信息如下: 5C java.lang.NullPointerException at net.shop.services.manage.account.impl.AccountServiceImpl.selectCount(AccountServiceImpl.java:44) at net.shop.web.action.manage.account.AccountAction.unique(AccountActi

如何在Java中避免空指针异常

空指针异常(Null Pointer Exception)是我们平时最容易碰到的,也是最令人讨厌的异常.本文介绍如何避免出现空指针异常. 首先我们看如下的示例 private Boolean isFinished(String status) { if (status.equalsIgnoreCase("Finish")) { return Boolean.TRUE; } else { return Boolean.FALSE; } } 如果status的值为空的话,那么将会出现空指针

一个空指针异常问题,求大神帮忙解决下,在线等

问题描述 一个空指针异常问题,求大神帮忙解决下,在线等 public void getQaList(String type, String qid, String qid_min, String cat_id, String tag_id, String page, String qid_top, boolean isShowLoadingDialog) { List<RequestParameter> parameter = new ArrayList<RequestParameter

junit4 测试类(A)的时候 测试结果报空指针异常

问题描述 junit4 测试类(A)的时候 测试结果报空指针异常 junit4 测试类(A)的时候 (A)中的方法引用了接口 然后用bebug测试的时候 到引用接口的那一行的时候就会报空指针异常 请问 有什么办法使他不报异常 而这个接口又不能去除掉 求解!!! 解决方案 http://bbs.csdn.net/topics/390786622

ssh下jsp页面访问实体数据出现空指针异常

问题描述 ssh下jsp页面访问实体数据出现空指针异常 我用的是ssh框架,通过action访问实体数据没有问题,当在jsp页面中创建dao的实现类对象去访问数据就出错了.顺便问下spring的实体映射是在前台页面执行完之后进行的吗?我怀疑jsp页面中去访问的实体数据不存在.jsp中代码:,dao中代码

jsp页面初始化报空指针异常,怎么办

问题描述 jsp页面初始化报空指针异常,怎么办 <% String jmzmessages = null; String jmzid=""; String jmzname=""; jmzmessages = request.getParameter("jmzmessage"); String[] jmzs = jmzmessages.split("/"); if(jmzs.length>=2){ jmzid = j

android Fragment切换跳转子页面空指针异常

问题描述 android Fragment切换跳转子页面空指针异常 我有四个fragment,进程序默认加载第一个,我点击了第四个fragment,然后点击它的地址列表!就会报首页轮播图的空指针异常,哪位大神吗有大概思路,给提示下 解决方案 手动抛出一个异常--- 解决方案二: http://www.51zxw.net/study.asp?vip=12576487

jsp页面中用到${pageContext.request.contextPath}报空指针异常

问题描述 jsp页面中用到${pageContext.request.contextPath}报空指针异常 起初是jsp中红色感叹号,报javax.servlet.jsp.jspException can not resolve a type 我加入了jsp-api.jar报后,就报图片中的空指针异常了 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding=&q

java-初学Strust2框架,报空指针异常,不知道哪里找不到

问题描述 初学Strust2框架,报空指针异常,不知道哪里找不到 server.xml中的 docBase路径也改过了的,TomCat启动时没问题,浏览器试验后,报空指针: 解决方案 数据是不是没传入,jsp页面里输入框的name属性要和数据库字段表里的字段名要一致