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 楼答案
仔细看,
print()
是一种静态方法。这意味着可以在没有Test1
实例的情况下调用它。也就是说,它可以简单地称为:test()
方法返回null这一事实与此无关。事实上,如果您使用的是现代IDE,它可能会在调用test().print()
时发出警告,警告您正在试图对对象实例调用静态方法不存在NullPointerException,因为JVM没有尝试遵从test()返回的对象。JVM知道它不需要在对象的实例上调用静态方法
如果您想更多地了解底层实现,以及
invokespecial
和invokestatic
之间的区别,我建议this question