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

类初始化阶段示例

作者: 龙剑灵 | 来源:发表于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