当前位置: 首页 > 面试题库 >

Java中空引用上的静态字段

颜新
2023-03-14
问题内容

static Java中的成员(static字段或static方法)与它们各自的类相关联,而不是与此类的对象相关联。以下代码尝试访问null引用上的静态字段。

public class Main
{
    private static final int value = 10;

    public Main getNull()
    {
        return null;
    }

    public static void main(String[] args)
    {
        Main main=new Main();
        System.out.println("value = "+main.getNull().value);
    }
}

尽管main.getNull()返回null,但它可以工作并显示value = 10。此代码如何工作?


问题答案:

该行为在Java语言规范中指定:

空引用可用于访问类(静态)变量而不会引起异常。

更详细地讲,进行静态场评估,例如Primary.staticField以下工作(重点是我的工作)-在您的情况下Primary = main.getNull()

  • 计算主表达式,并丢弃结果。[…]
  • 如果该字段是非空白的final字段,则结果是作为主表达式类型的类或接口中指定的类变量的值。[…]


 类似资料:
  • 问题内容: 在UNI atm上做Java课程,我遇到了骰子问题。 我有以下内容: 编译时,我得到:无法从静态上下文引用非静态变量n。我如何解决这个问题,同时让它从用户给定的值中随机化? 问题答案: 不是静态变量,因此您不能以静态方式()引用它。 由于它是类中的实例变量,并且您正在类中引用它,因此可以使用代替。

  • 问题内容: 当尝试从另一个类中调用一个方法时,我的方法出现错误 说非静态字符串不能从静态上下文中引用。变量不是静态的,但是我仍然有这个问题吗? 我现在的主程序大块(很抱歉地方的草率编码) InfixToPostfixParens的代码 问题答案: 您的代码与以下代码(编译)有何不同?

  • 我有一个私有int数组,我需要以某种方式找到长度,但在静态类下无法做到这一点。我必须保持类的静态,是否可以添加其他方法来将a.length更改为其他方法? 该问题是由a.length引起的。

  • 我使用了http://www.concretepage.com/java/jdk-8/java-8-unaryoperator-binaryoperator-example中的示例。 我发现真正令人困惑的是,当我在形成收集器时错误地将一个错误的类型放入其中一个泛型中时,Java编译器给了我一个非常误导的信息: 不能从静态上下文引用非静态方法 我的错误与现实中的静态vs实例上下文无关: 我的错误是在

  • 问题内容: 我正在玩http://www.concretepage.com/java/jdk-8/java-8-unaryoperator- binaryoperator- example中的 示例。 我真正感到困惑的是,当我在形成收集器时错误地将错误的类型放到一个泛型中时,java编译器给了我一个非常令人误解的信息: 无法从静态上下文引用非静态方法 我的错误与现实中的静态vs实例上下文无关: 我