Java 奇怪代码输出

Java 奇怪代码输出,java,Java,我偶然发现了一些非常奇怪的代码,我很惊讶这些代码不会导致错误 public class WeirdCode { public static int fooField = 42; public WeirdCode getFoo(){ return null; } public static void main(String args[]) { WeirdCode foo = new WeirdCode(); S

我偶然发现了一些非常奇怪的代码,我很惊讶这些代码不会导致错误

public class WeirdCode {

    public static int fooField = 42;

    public WeirdCode getFoo(){
        return null; 
    } 
    public static void main(String args[]) {
        WeirdCode foo = new WeirdCode();
        System.out.println(foo.getFoo().fooField); 
    }
}

令人惊讶的是,它打印出42个!有人能解释一下吗?

对类的静态成员的引用是在编译时解析的。编译器不关心表达式的值是什么,只关心它的类型,因此是
((WeirdCode)null).fooField
就像其他任何东西一样,只是解决了
古怪的代码.fooField

你期望它会返回什么?@ReutSharabani我想它会抛出一个nullpointerexception我想底层投票者并没有完全阅读代码。这是个不错的问题。我当然认为它会扔出去。谢谢你让我学到了一些新东西+1@sstan谢谢,我很高兴我们都学到了一些新的东西