为什么java中静态成员的顺序很重要?
例如
public class A {
static int i= 1;
static int c = i;
int a = c; <<------ ok
}
对比
public class B {
int a = c; <<--- compile error
static int c = 1;
static int i = c;
}
为什么 Java 的设计使得这种排序有所不同?(我根据 ykaganovich 的回答编辑了我的问题)
编辑:谢谢大家的帮助!我已经用非静态变量测试了我的示例。它具有完全相同的行为,因此静态在这里没有任何作用。这个问题具有误导性(至少对我而言)。我将尝试总结您的答案。
编辑2:
我将尝试总结答案。有关更多信息,请阅读以下答案:)
a) Java 中的直接前向引用为:
static int i = c;
static int c = 1;
非常混乱。所以在Java中是不允许的。主要原因是初始化顺序。
b) Java 中允许间接前向引用
public class Test {
int i = c();
int c() { return c; }
int c = 1;
}
c)您必须准确定义变量声明(或初始化)的执行顺序,这只是在java中如何完成的定义。在java中,这个顺序是从上到下的。
d) 明确定义的顺序提供了一种可预测结果的方法。
e) 如果你设计好你的程序,你就不会有这个问题。