当前位置: 移动技术网 > IT编程>开发语言>Java > 空指针异常

空指针异常

2020年07月31日  | 移动技术网IT编程  | 我要评论

空指针异常是指空的引用去访问实例变量会出现异常。比如有如下代码:

class Date{
	int year;
	int month;
	int day;
	public Date(int year1,int month1,int day1){
		year = year1;
		month = month1;
		day = day1;
	}
}
public class DateTest{
	public static void main(String[] args){
		Date time = new Date(2020,7,29);
		System.out.println("year = " + time.year);
		System.out.println("month = " + time.month);
		System.out.println("day = "  + time.day);
	}
}

上述程序的内存图如下所示:
在这里插入图片描述

当引用为空,即 time = null 时,代码如下:

class Date{
	int year;
	int month;
	int day;
	public Date(int year1,int month1,int day1){
		year = year1;
		month = month1;
		day = day1;
	}
}
public class DateTest{
	public static void main(String[] args){
		Date time = new Date(2020,7,29);
		System.out.println("year = " + time.year);
		System.out.println("month = " + time.month);
		System.out.println("day = "  + time.day);
		**time = null;**//新增代码引用为空
		**System.out.println("year = " + time.year);
		System.out.println("month = " + time.month);
		System.out.println("day = "  + time.day);**
	}
}

执行结果如下:
在这里插入图片描述
可以看到,编译阶段是可以通过的,因为引用time属于Date类,在Date类中有year,month,day属性,所以编译器允许通过time引用去访问Date属性。但是程序在运行阶段,在运行后会显示java.lang.NullPointerException,也就是空指针异常。此时的内存图如下所示:
在这里插入图片描述
这是因为当执行time = null后,引用time不再保存对象的地址,也就是说,引用time找不到对象了,对于程序来说这个时候就没有办法正常访问了,这种状况就是所谓的空指针异常。简单的说的话,就是引用找不到对象所以发生异常。

本文地址:https://blog.csdn.net/weixin_43797245/article/details/107681043

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网