java经典面试题(类加载和初始化顺序)

来源:互联网 发布:淘宝托管多少钱一个月 编辑:程序博客网 时间:2024/06/05 06:30
public class Test {    public static void main(String[] args){        SingleTon.getInstance();        System.out.println("count1=" + SingleTon.count1);        System.out.println("count2=" + SingleTon.count2);    }}class SingleTon {    private static SingleTon singleTon = new SingleTon();    public static int count1;    public static int count2 = 0;    public  int count3;    public  int count4 = 3;    private SingleTon() {        count1++;        count2++;    }    public static SingleTon getInstance() {        return singleTon;    }}

打印结果:
count1=1
count2=0
分析:
1.调用SingleTon.getInstance();的时候首先加载类静态成员变量, 给静态成员
变量赋默认初始值
2.从上往下给静态成员变量赋值(即等号后面的值)
3.private static SingleTon singleTon = new SingleTon();执行后新建对象赋给singleTon
new SingleTon(); 执行顺序:1).调用构造方法里面的super();函数(即初始化父类对象)
                                             2).会给所有的非静态变量赋默认值
                                             3).给所有的非静态成员变量赋值(即等号后面的值),此时count3
                                             没有重新赋值而count4重新赋值为3,然后调用构造方法
4.接着给下面的静态变量赋值count1没有可赋的值跳过他,给count2赋值为0
5.固打印count1为构造方法++之后的值为1,count2为重新赋值后的值为0

阅读全文
2 0