Java 合法前向引用

标签 java reference forward static-initialization

下面的代码是合法的前向引用吗?如果是,为什么?

public class MyClass
{
  private static int x = getValue();
  private static int y = 5;
  private static int getValue()
  {
    return y;
  }
  public static void main(String[] args)
  {
    System.out.println(x);
  }
}

最佳答案

您拥有的上述代码是完全合法的 Java。在 Java 中,静态字段初始化如下:首先,将所有字段设置为其类型的默认值(0、falsenull),然后在它们被声明的顺序。这意味着上面的代码保证执行以下操作:

  1. xy 设置为零,因为这是 int 的默认值。
  2. 通过调用getValue() 初始化x,它读取y 的值。由于 y 还没有被初始化,它的值仍然是 0。
  3. y初始化为5。

这意味着 x 将取值 0 而 y 将取值 5。此行为是可移植的且有保证的。 <强> You can see this here .

希望这对您有所帮助!

关于Java 合法前向引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10035890/

相关文章:

Android - 如何检测来电是否被重定向?

java - tomcat中跨上下文请求转发导致java.lang.ClassCastException : org. glassfish.jersey.message.internal.TracingLogger

java - 从多个属性文件自动加载更新的属性

java - java小程序中的淡入淡出效果

java - buildSrc:无法获取 org.gradle.api.internal.artifacts.dsl.dependency.DefaultDependencyHandler 类型的对象的未知属性

Java对象的创建和引用

swift - 在 Swift 中转发错误

java - 使用 spring-data-redis 在 redis 中存储原始 json

c# - 如何解决 : System. TypeLoadException?

c++ - 作为类成员的常量引用