【发布时间】:2013-08-19 22:12:24
【问题描述】:
为什么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) 如果你的程序设计得好,你就不会有这个问题。
【问题讨论】:
-
我不明白。你想知道什么?
-
如果您有更深入的问题或特定问题,请随时编辑您的问题并提出。
-
谢谢!我的问题是为什么 java 是这样设计的。
标签: java static initialization