Java中的全局变量创建顺序

时间:2014-08-22 19:15:00

标签: java

是否保证按顺序创建以下实例?例如,我们可以假设B总是在E?

之前创建
public class Example {
  public static final Integer A = new Integer(1);
  public static final Integer B = new Integer(2);
  public static final Integer C = new Integer(3);
  public static final Integer D = new Integer(4);
  public static final Integer E = new Integer(5);
  public static final Integer F = new Integer(6);
}

4 个答案:

答案 0 :(得分:1)

虽然您的代码不会编译但是它会按顺序创建(如果正确纠正),因为编译器将逐行执行并执行并创建每个实例。

正确的代码:

public static final Integer A = new Integer(1);
public static final Integer B = new Integer(2);
public static final Integer C = new Integer(3);
public static final Integer D = new Integer(4);
public static final Integer E = new Integer(5);
public static final Integer F = new Integer(6);

答案 1 :(得分:1)

只要确认语句按顺序执行,很可能是按顺序创建实例/对象,或者按顺序分配内存。

此外,您的代码甚至不是Kevin Krumwiede指出的有效,您缺少所有变量/引用的数据类型声明...

public static final Integer A = new Integer(1);
public static final Integer B = new Integer(2);
public static final Integer C = new Integer(3);
public static final Integer D = new Integer(4);
public static final Integer E = new Integer(5);
public static final Integer F = new Integer(6);

答案 2 :(得分:1)

是的,他们保证按顺序运行。您可以拥有基于相同值中先前定义的静态字段的值创建的静态字段。

public static final Integer A = new Integer(1);
public static final Integer B = A+A;

其他人已经指出你忘了声明字段的类型,但你也应该知道,因为自动装箱你不需要使用“new Integer()”。以下代码是等效的:

public static final Integer A = 1;
public static final Integer B = 2;
public static final Integer C = 3;
public static final Integer D = 4;
public static final Integer E = 5;
public static final Integer F = 6;

如果您使用的是Eclipse,请确保告诉它不要在代码清理过程中重新排序字段。

答案 3 :(得分:1)

是的,它们在加载课程时按顺序初始化。有关详细信息,请参阅JLS 12.4.2。具体来说,这个程序的第9步,

  

接下来,按文本顺序执行类的类变量初始值设定项和静态初始值设定项,或接口的字段初始值设定项,就像它们是单个块一样。