欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

空指针异常

程序员文章站 2022-03-23 22:14:18
空指针异常是指空的引用去访问实例变量会出现异常。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(2...

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

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

相关标签: java jvm