zoukankan      html  css  js  c++  java
  • Java静态变量初始化的坑

    class SingleTon {  
        private static SingleTon singleTon = new SingleTon();  
        public static int count1;  
        public static int count2 = 1;  
      
        private SingleTon() {  
            count1++;  
            count2++;  
        }  
      
        public static SingleTon getInstance() {  
            return singleTon;  
        }  
    }  
      
    public class Test {  
        public static void main(String[] args) {  
            SingleTon singleTon = SingleTon.getInstance();  
            System.out.println("count1=" + singleTon.count1);  
            System.out.println("count2=" + singleTon.count2);  
        }  
    }  

    执行结果:singTon.count1=1  singTon.count2=1

    class SingleTon {  
        public static int count1;  
        public static int count2 = 1; 
        private static SingleTon singleTon = new SingleTon();  
        
        private SingleTon() { 
            count1++;  
            count2++;  
        }  
      
        public static SingleTon getInstance() {  
            return singleTon;  
        }  
    }  
      
    public class Demo {  
        public static void main(String[] args) {  
            SingleTon singleTon = SingleTon.getInstance(); 
            System.out.println("count1=" + singleTon.count1);  
            System.out.println("count2=" + singleTon.count2);  
        }  
    }

    执行结果:count1=1 count2=2

     private static SingleTon singleTon = new SingleTon();  这句代码再static int ...之前只影响未被赋值的变量,在static int...之后,全部影响

    原因:实例的初始化流程

    1.类被加载的时候,普通方法加载到方法区,静态方法和静态字段加载到方法区中的静态区

    2.首先静态字段会进行默认初始化。即 singTon=null       count1=0        count2=0

    3.然后静态字段会进行显示初始化。问题就出现这里(这里就是影响结果的地方)

    4(第一个例子先执行4).首先 singTon 进行显示初始化 它会创建 实例,调用构造函数,执行完成以后 

    5(第二个例子先执行5).然后才是静态变量 count1和count2进行显示初始化

    6.然后执行静态代码块中的内容,此处没有静态代码块。

  • 相关阅读:
    20145206 《信息安全系统设计基础》第3周学习总结
    20145206 《信息安全系统设计基础》第2周学习总结
    Alpha 冲刺 (3/10)
    Alpha 冲刺 (2/10)
    Alpha 冲刺 (1/10)
    福大软工 · 第七次作业
    福大软工 · 第八次作业(课堂实战)- 项目UML设计(团队)
    福大软工1816 · 第六次作业
    福大软工1816 · 第五次作业
    福大软工1816 · 第四次作业
  • 原文地址:https://www.cnblogs.com/hetaoyuan/p/11263840.html
Copyright © 2011-2022 走看看