【发布时间】:2015-04-23 11:32:21
【问题描述】:
我想知道java是如何初始化这些静态变量的。 看不懂的代码如下所示:
public class Main {
static int first=test();
static int second=2;
static int third=test();
public static void main(String[] args) {
System.out.println(first);
System.out.println(second);
System.out.println(third);
}
public static int test() {
return second;
}
}
下面简单代码的输出是0 2 2
如果编译器会自动忽略不可执行的方法或者静态变量在定义之前为0?
抱歉,谷歌搜索找不到准确的描述。
【问题讨论】:
-
静态加载类之前加载。这就是为什么它是第一个 0,因为该方法还没有准备好使用。
-
statics 在类之前加载,所以当 test() 首次执行时返回 0。谢谢
-
一个附加问题。如果我在声明
first之前添加static{ System.out.print(first); },就会出现错误。为什么?如果在加载类之前初始化了statics,那么上面的代码应该是有效的。 -
@hsc 在变量初始化之前你仍然不能直接使用它,但是你可以像
firstideone.com/hGqlX5 那样间接使用它 -
@PeterLawrey 非常感谢,终于搞定了
标签: java memory methods static