是否保证按顺序创建以下实例?例如,我们可以假设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);
}
答案 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步,
接下来,按文本顺序执行类的类变量初始值设定项和静态初始值设定项,或接口的字段初始值设定项,就像它们是单个块一样。