来自 null 的 java 静态字段

标签 java static nullpointerexception

<分区>

我在 Internet 上找到了这段代码,希望有人能向我解释一下...

public class Foo {
    static int fubar = 42;

    public static void main(String[] args) {
        System.out.println(((Foo) null).fubar);
    }
}

此代码编译并正常工作,输出结果 42

如何在不抛出 NullPointerException 的情况下从 null 访问变量 fubar

最佳答案

它实际上并不是在寻找null 上的字段,因为静态方法和字段不需要实例。强制转换使表达式成为 Foo 的类型,而 fubarFoo 上已知的static 字段,因此编译器和 JVM 没有问题。

通常,您可以通过说Foo.fubar 来访问该字段。然而,Java 足够好,可以提供一个快捷方式:如果您尝试访问给定类型的实例表达式上的静态字段或方法,它会像您说的那样对待它 [SomeType].theField。这就是这里发生的事情。

关于来自 null 的 java 静态字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6782276/

相关文章:

java - 用于更改/修改代码的用户定义注释

c - 初始化静态结构

java - Android 应用程序中的 NullPointerException( bundle ?)

java - 使用 Java Applet 实现键盘监听器

java - 代码注释风格不同

java - 热图未以 fragment 形式显示

python - Django 静态文件再次不起作用

c++ - C++中static和static函数的使用错误

jsf - 访问托管 bean 构造函数中的注入(inject)依赖项会导致 NullPointerException

java.lang.NullPointerException : Attempt to invoke virtual method on a null object reference