0
点赞
收藏
分享

微信扫一扫

舍友给我带饭,请我给他讲明白Java中的引用,对象,和空指针异常~听完直呼值了,问我下顿想吃啥~


系列文章

第一篇:面向对象时,哈喽一定爱极了world吧?【史上最有爱的Java基础总结(足足六千字)】【一】

写在前面


目录

写在前面

由空指针异常,深耕引用

知识铺垫之:再谈数据类型

什么情况下会出现 NullPointerException呢?

异常原因解释

1)引用和对象的关系是什么

2)什么叫做解引用(dereference)

3)引用为 null 代表什么含义


由空指针异常,深耕引用

知识铺垫之:再谈数据类型

我们知道Java中的数据类型分为 基本数据类型 和 引用类型

其中引用类型

类class
Java引用类型包含的三大类接口interface
数组array


什么情况下会出现 NullPointerException呢?

我给你了一把钥匙,但是找不到钥匙能打开的抽屉。这就是空指针异常!

看到这里,请试着自己写一个空指针异常出来!

public class Test1 {
    public void method(){
        System.out.println("Hello!");
    }

    public static void main(String[] args) {
        Test1 test1 = null;
        test1.method();
//        int[] test_array = null;
//        System.out.println(test_array.length);
    }
}
Exception in thread "main" java.lang.NullPointerException
	at com.zdx.daily.java0105.p1.Test1.main(Test1.java:19)

当引用变量(钥匙)根据引用去开具体对象(抽屉)的时候,发现抽屉根本不存在(对象为null)。这时候就出现了空指针异常!~

        int[] test_array = null;
        System.out.println(test_array.length);

试试数组这种引用类型,结果仍然是出现 NullPointerException!

再试试字符串的String 类

        String string = null;
        System.out.println(string.length());

结果仍然是出现 NullPointerException,String类属于是class类引用的一种,所以符合引用。


异常原因解释

这里有几个概念

1)引用和对象的关系是什么

我们每使用new声明一个对象,位于内存上的JVM(java虚拟机)内有一块叫做堆(heap)的地方就会分配内存给我们所声明的对象。如果是 Person per = new Person();

所new出来的对象,会主动把地址交给他的等号左边,使其左边的引用变量对对象进行引用,

引用指向的是对象,指向可以修改。

即引用指向的是存储单元里的值。

这里顺嘴提一句,在Java中,只要有new关键字出现new对象,就一定在JVM的堆上开辟存储单元用来存储对象!~老陈在这里保证对象一定在堆(Heap)上,但是没说引用变量一定在栈(Stack)上嗷!~所以学java就先不谈地址(虽然底层有地址)


2)什么叫做解引用(dereference)

解引用就是根据你刚才给出的存储单元的地址,去这个存储单元里找你所需要的东西!

在C/C++里,解引用的操作符是(*),在java里,解引用的操作符是(.)

比如一个字符串对象(string),是一个具体的抽屉,抽屉切实存在的,我需要从这个抽屉中拿到字符串的长度。就需要解引用!~

通过解引用,这个string抽屉内有这么多内容。

 



3)引用为 null 代表什么含义

 在C/C++里面

而指针指的是地址,是门牌号,一旦门牌号里的内存(居民)搬走之后,人去楼空了,那么这个地址是没有用的。指针是变量,变量换言之就是一段内存空间的代表。

在Java里面

回到我们的Java为null代表什么含义

比如说今年过年,你收了一大笔压岁钱,你妈妈告诉你说帮你把压岁钱保存起来,存在抽屉里。

并给了你一把钥匙        String 压岁钱抽屉钥匙;

但是等你需要钱了,真的需要去动这笔钱的时候,你发现,压根都没有这个抽屉哦!

哈哈哈哈哈哈艹,这下理解了吧?String 压岁钱抽屉钥匙 = null;


由于本人水平有限,只是在学小白一枚。知识的理解难免有不当之处,代码可能存在错误的地方,有任何问题欢迎评论区留言指出,感激不尽!

创作不易,烦请三连支持一下!~

重回头系统Java学习之旅,我们一起学习,共同进步!~让我们一起向未来!


最后的最后

光阴荏苒 斗转星移,请相信
爱和希望总会比病毒蔓延得快
请相信
“一方有难,八方支援”的中国力量
请相信
凛冬散尽之时,星河定会长明
我们终将用勇敢和坚毅
照亮同一使命

山河共风雨
日月耀明天
我们同心抗疫
必将苦尽甘来,山河无恙

人间皆安,万事顺遂,长乐无忧

举报

相关推荐

0 条评论