在下面的代码法律向前引用的情况下? 如果是,为什么?
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);
}
}
在下面的代码法律向前引用的情况下? 如果是,为什么?
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。 首先,所有字段设置为默认将其类型(0:在Java中,如下静态字段被初始化false
,或null
),然后在其声明的顺序初始化。 这意味着,上述代码是保证执行以下操作:
x
和y
到零,因为这是默认值int
秒。 x
通过调用getValue()
其内容的值y
。 由于y
尚未初始化,它仍然有值0。 y
至5。 这意味着, x
将采取的值0和y
将值5。这种行为是便携式的,并保证。 你可以在这里看到 。
希望这可以帮助!
你可以告诉它是否是合法的或不被其编译的事实; 其它语言不同,Java没有的概念“未定义的行为。” 这里发生的是完全拼写出来。 这可能是违反直觉的,但它是专门法律:之前它是从,而另一初始化静态变量调用的方法初始化,您可以访问一个静态变量。 访问的表面类似的情况下y
直接从x
的初始值设定-即
private static int x = y;
private static int y = 5;
特别禁止。 确实没有很强的理由 - 这只是它是如何。