系列文章
第一篇:面向对象时,哈喽一定爱极了world吧?【史上最有爱的Java基础总结(足足六千字)】【一】
写在前面
目录
什么情况下会出现 NullPointerException呢?
由空指针异常,深耕引用
知识铺垫之:再谈数据类型
我们知道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学习之旅,我们一起学习,共同进步!~让我们一起向未来!
最后的最后
光阴荏苒 斗转星移,请相信
爱和希望总会比病毒蔓延得快
请相信
“一方有难,八方支援”的中国力量
请相信
凛冬散尽之时,星河定会长明
我们终将用勇敢和坚毅
照亮同一使命
山河共风雨
日月耀明天
我们同心抗疫
必将苦尽甘来,山河无恙
人间皆安,万事顺遂,长乐无忧