问题描述
====
- 相信Java程序员对
NullPointException
都不会陌生的。java的思想就是面向对象。在对象的领域java中抽象出一个Null对象 - 我们今天的问题就是这个Null 空指针异常。一直以为null对象调用方法方法就会报错。但是下面这段代码为什么可以正常运行
public class NullTest {
private static void ptest() {
System.out.println("我是test方法。。。。。");
}
public static void main(String[] args) {
NullTest nullTest = null;
nullTest.ptest();
}
}
null有哪些使用
=========
- 对!null虽然是个名义上的定义在JVM中并没有真是存在。
- 可能有人会说我疯了。Null对象还能有啥用。他的存在就是抛出空指针异常。但是我想对你说的是Null对象存在即合理。存在一定有其作用。
- null虽然不是真是存在的对象。但是我们可以抽象的理解成一个特殊的对象。所以当我们赋值null的对象再次instance的时候返回false
默认值
- java领域中存在两种数据类型:基本类型 引用类型。对于基本类型每个类型都会有默认值比如说int默认值是0;然而引用类型也不能例外,他的默认值就是null。
- 上面也说了null是引用类型的默认值,所以null可以赋值给所有的引用对象。但是null不能赋值给基本类型。因为他们自己有默认值
关键字
- 可以这么说null是我们绕不过去的一个坎。因为null是我们java中真是存在的一个关键字。
instance
代码语言:java复制public class NullTest {
public static void main(String[] args) {
Integer num = null;
System.out.println(num instanceof Integer);
}
}
- 猜猜上面输出的是啥? 是false 。因为被赋值null就被赋值为另外一个对象。只不过这个对象是特殊对象。是可以看做是本对象使用但是实际上并不是。这里所以是false
问题解析
====
- 言归正传,为什么上面
null
对象可以正常运行。这也是为什么我把他叫做是bug
的原因。按常理来说被赋值null
。执行是肯定会空指针异常,但是他没有就反而是个问题 - 为什么没有报错是因为
ptest
这个方法是NullTest
这个类的静态方法,什么叫静态方法是该类所有变量共享的方法。既然是该类的共享方法那么null对应的num
在签名上依然是NullTest
这个类所有他也可以使用ptest
这个方法。
总结
==
- 所有东西不能仅仅靠自己的感觉,更多的是需要我们自己的测试。
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!