我们可以在null对象上调用任何方法吗?

Ana*_*and 4 java null method-call

可能吗?

Object obj=null;

obj.someMethod();

someMethod{/*some code here*/}
Run Code Online (Sandbox Code Playgroud)

Mat*_*nen 8

您可以在空指针上调用静态方法.在静态方法调用中,指针自然会被完全忽略,但是当某些东西(不看类定义)看起来应该导致NullPointerException运行时,它仍然是一个例子.

class FooObject {
    public static void saySomething() {
        System.out.println("Hi there!");
    }
}

class Main {
    public static void main(String[] args) {
        FooObject foo = null;
        foo.saySomething();
    }
}
Run Code Online (Sandbox Code Playgroud)

但只是为了说清楚 - 不,你不能用空指针调用实例方法.保护程序员不受此限制是将Java等语言与C++等"低级语言"区别开来的真正基本保护措施之一.它允许在调用端报告错误,而不是在方法本身内导致一个莫名其妙的段错误/诸如此类错误.

  • 应该注意的是,从这样的变量调用`static`方法几乎普遍被认为是坏的风格:它表示没有时的关系. (5认同)

Har*_*Joy 5

不,我们不能。只要方法不是静态的,它就会抛出 NullPointerException。如果方法是静态的,它将运行。

阅读:null :Java 术语表

  • +0:如果 someMethod() 是静态的,则不会。 (4认同)