【发布时间】:2015-08-02 14:15:18
【问题描述】:
我用的是同一种概念,我在头等舱里用过。
b 被初始化为 0,我在使用 b 的所有地方都得到了 0。
过了一段时间,我得到了原因并运行了调试器,发现在函数调用之前 a 没有被分配任何值。变量 a 的值只有默认值 0。
但是当我运行 Test2 类时。它给出了输出 5。
我想知道这个初始化是什么时候发生的? 我知道静态变量在编译时获得价值。但是静态决赛呢? 这个变量什么时候得到它的值?
public class Test1 {
static int b=add();
static int add()
{
return a;
}
static int a=5;
public static void main(String[] args) {
System.out.println(b);
}
}
//Gives output 0
public class Test2 {
static int b=add();
static int add()
{
return a;
}
final static int a=5;
public static void main(String[] args) {
System.out.println(b);
}
}
//gives output 5
【问题讨论】:
-
a尚未在 Test 1 中分配,如果您将static int a=5;移动到第一行,您将得到 5。正如您在测试 2 值将被设置
标签: java variables static variable-assignment final