我有一个称为Color的类,其中有三个静态对象(使用同一类本身实例化)和一个int类型(称为i)变量。当我运行类时,“ i”变量在构造函数中为增量,但未持久存储在内存中,请在下面的代码中对此进行解释package test;public class Color{ public static Color RED = new Color(); public static final Color BLUE = new Color(); public static final Color GREEN = new Color(); static int i=0; Color(){ System.out.println("Incrementing 'i' here "+(++i)); } public static void main(String[] args) { System.out.println("The 'i' variable is not incremented here, it still shows '0' , 'i' is: "+ Color.i ); // line 14 Color x = new Color(); System.out.println(x.i); }}内容如下:Incrementing 'i' here 1Incrementing 'i' here 2Incrementing 'i' here 3The 'i' variable is not incremented here, it still shows '0' , 'i' is: 0Incrementing 'i' here 11
2 回答
白衣染霜花
TA贡献1796条经验 获得超10个赞
类初始化从上到下进行。当初始化Color时,我们创建了一个新的Color。为了创建新的Color,我们还必须初始化Color。这就是所谓的递归初始化,而系统所做的就是简单地忽略递归初始化并执行new Color()
。此类初始化程序按以下顺序从上到下执行
public static Color RED = new Color();
这会将静态变量i设置为1。public static final Color BLUE = new Color();
这将静态变量i增加到2public static final Color GREEN = new Color();
这将静态变量i增加到3static int i=0;
这会将静态变量i设置为零。
现在,当主线程运行时,它看到static变量为0并递增为1。
作为反例,请尝试将替换static int i=0
为static Integer i=new Integer(0).
。这将引发一个NullPointerException
。这是因为在类初始化时,在public static Color RED = new Color();
执行时它将i视为null,因为那时i尚未初始化,导致NullPointerException
添加回答
举报
0/150
提交
取消