Java中的变量分为两类,基本变量和引用变量。

如果是成员变量,在创建类的时候,所有成员变量会被赋予默认值。int的默认值是0,boolean的默认值是false,而所有引用变量的默认值则是null。

Java是面向对象的,在Java中一切皆对象,而对象本身就是一种引用类型。我们创建一个类对象时,对象内的所有成员变量会有默认值,可是如果只声明了对象,却给了他空值,那这个对象就只是个“虚名”,没有跟任何容器关联起来。就好比我们想好了一个名字叫张三,却还没制定谁叫张三一样。这个张三是虚名,没有跟人关联起来。既然是需的,那这个张三自然也就不具备任何年龄,性别,行为方法等属性和方法了。对这个张三我们可以直接使用他做判断,做输出,因为他是有值null的,就好比整数的0一样,0也是个数呀。可是对于张三的年龄我们就不能做任何操作了,因为这个东西根本不存在。如果你一定要在程序里去访问这个值,就系统就会报空指针异常。

所以,系统什么时候会报空指针异常呢?如果一个对象本身为空,而我们使用对象本身的时候不会出现异常,因为他是有值的,而他的值就是null。可如果我们进一步想直接使用对象内的成员进行操作,按系统就会报空指针异常,因为这个对象是空的,他不存在成员。你直接去访问成员,当然会出错。

理解了这一点,就不难理解return null了。

public Object function(){
....
return null;}
其实就可以理解为
public int function(){
.....
return 0;}

null是个值,任何Object类都有可能是null值,赋值null给一个对象,就意味着他成了“空名”,被架空了,没有了任何成员和方法。

要想使用它的成员和方法,就一定要首先让他跟一个容器关联起来,让张三这个人真实的存在。