我用Java编写了这个程序
public class Why { public static void test() { System.out.println("Passed"); } public static void main(String[] args) { Why NULL = null; NULL.test(); } }
我读到在null对象上调用方法会导致NullPointerException,但是上面的程序不是吗?为什么是这样?我是否理解不正确?
null
NullPointerException
test()是一种static方法。一个static成员所属的类型,并且不需要一个实例来访问。
test()
static
甲static构件应该仅可以经由型表达访问。也就是说,你应该将其编写如下:
Why.test(); // always invoke static method on the type it belongs to!
Java确实允许你static通过对象引用表达式访问成员,但这非常容易引起误解,因为这不是static成员访问的实际语义。
Why aNull = null; aNull.test(); // DO NOT EVER DO THIS! // invokes Why.test(), does NOT throw NullPointerException
static通过对象引用表达式访问成员时,仅声明的引用类型很重要。这意味着: