美文网首页
类初始化阶段示例

类初始化阶段示例

作者: 龙剑灵 | 来源:发表于2019-12-04 01:26 被阅读0次
public class MyTest6 {

    public static void main(String[] args) {
        Singleton singleton = Singleton.getInstance();
        System.out.println("counter1: " + Singleton.counter1);
        System.out.println("counter2: " + Singleton.counter2);
    }
}

class Singleton {

    public static int counter1 = 1;

    private static Singleton singleton = new Singleton();

    public Singleton() {
        counter1++;
        counter2++;//准备阶段的重要意义

        System.out.println(counter1);
        System.out.println(counter2);
    }

    public static int counter2 = 0;

    public static Singleton getInstance() {
        return singleton;
    }
}

Singleton.getInstance() 调用此静态方法,表示对这个类的主动使用, 在主动使用这个类的初始化之前,有个准备阶段是给这个类的成员变量赋初始值(非用户指定,如int 赋值0, singleton赋值null), 上例子构造方法在准备阶段是没有执行的.
准备阶段完成后,开始初始化时, counter1值被赋值为1, Singleton singleton = new Singleton();此时singleton被赋值的不是null,而是Singleton实例,此时Singleton()构造方法会执行, 此时 counter1++, counter2++ 中的变量值是已经初始化后的值, 构造方法中 System.out.println(counter1) 输出的值为2,
System.out.println(counter2)输出的值为1, 当初始化往后执行时, counter2再次被赋值为0,最终程序输入结果如下:
2
1
counter1: 2
counter2: 0

相关文章

网友评论

      本文标题:类初始化阶段示例

      本文链接:https://www.haomeiwen.com/subject/pjckgctx.html