Java中空对象调用函数一定会崩溃吗?答案是否定的。

以我们一般的认知来看,一个空对象在调用一个函数时,即使不崩溃也会抛出异常,但事实确实存在特例。

不解释了,直接看例子:

public class TestDemo {
    public static void func() {
        System.out.println("This is func()...");
    }
    public static void main(String[]args) {
        TestDemo tDemo = null;
        tDemo.func();//放心吧,这行代码不会崩溃的,其实等价于TestDemo.func();
    }
}

原因:func()是类TestDemo的静态方法,也属于类的成员方法。通常使用类名作为调用者来调用类的静态方法,其实也可以使用类对象来调用类的静态方法,其效果是完全一样的。当使用实例对象调用类的静态方法时,实际上是委托给类来访问调用的,此时即使这个实例对象是空的,它也可以访问到这个静态成员方法,而不发生空指针异常崩溃。但是一般不推荐这样使用,还是用类名称来直接调用类的静态方法吧。