为什么这段代码有效?

时间:2013-11-29 22:31:06

标签: java static

伙计们我最近看到了一些代码,并且不知道为什么会有效?

 public class Test1{

    static Test1 test(){
        System.out.println("test");
        return null;
    }

    static void print(){
        System.out.println("print");
    }

    public static void main(String...strings){
        test().print();
    }

}

1 个答案:

答案 0 :(得分:2)

仔细观察,print()是一种静态方法。这意味着可以在没有Test1实例的情况下调用它。即它可以简单地称为:

Test.print();

test()方法返回null的事实无关紧要。实际上,如果您使用的是现代IDE,则可能会在调用test().print()时发出警告,警告您正在尝试在对象实例上调用静态方法。

没有NullPointerException,因为JVM没有尝试推测test()返回的对象。 JVM知道它不需要在对象的实例上调用静态方法。

如果您想了解有关底层实施的更多信息,以及invokespecialinvokestatic之间的区别,我建议this question