logo头像

学如逆水行舟,不进则退!!!

文章目录

NullPointException引发对Null对象的思考

问题描述

  • 相信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

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这个方法。

总结

  • 所有东西不能仅仅靠自己的感觉,更多的是需要我们自己的测试。
上一篇
坚持原创技术分享,您的支持将鼓励我继续创作!

评论系统未开启,无法评论!