有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么这段代码有效?

伙计们,我最近看到了一些代码,但不知道它为什么会工作

 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) 个答案

  1. # 1 楼答案

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

    Test.print();
    

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

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

    如果您想更多地了解底层实现,以及invokespecialinvokestatic之间的区别,我建议this question