黑马程序员技术交流社区

标题: 跟静态有关的初始化 [打印本页]

作者: ☆今☆    时间: 2013-7-28 21:11
标题: 跟静态有关的初始化
       关于静态的初始化题
public class StaticDemo {
        public static void main(String[] args) {
               
                Demo1 d = Demo1.getInstance();
                System.out.println(d.count1+"......."+d.count2);       
        }

}
class Demo1{
        private Demo1(){
                System.out.println(count1+"...构造函数前..."+count2);
                count1++;
                count2++;
                System.out.println(count1+"...构造函数后..."+count2);
        }
        public static int count1;
        public static int count2=2;
        static{
                System.out.println(count1+"...静态代码块前..."+count2);
                count1++;
                count2++;
                System.out.println(count1+"...静态代码块后..."+count2);
        }
        private static Demo1 d = new Demo1();
       
        public static Demo1 getInstance(){
                return d;
        }
}
一个类中包含静态成员变量,静态代码块等,会在类加载时,根据这些静态变量和代码的在源码中的顺序执行.
本题中就是这样的,类加载时,1,先执行两成员变量的默认和显示初始化.2,执行静态代码块,在执行静态类对象的
创建,此时调用构造函数进行初始化.
所以结果是:
0...静态代码块前...2
1...静态代码块后...3
1...构造函数前...3
2...构造函数后...4
2.......4
若把对象的创建放在成员变量初始化之前,结果就有不一样.1,先是默认初始化,再执行构造代码块,2然后才是显示初始化.
3,最后才是静态代码块.
执行结果:
0...构造函数前...0
1...构造函数后...1
1...静态代码块前...2
2...静态代码块后...3
2.......3


作者: 许庭洲    时间: 2013-8-7 07:07
值得学习ing!
作者: ☆今☆    时间: 2013-8-8 21:47
许庭洲 发表于 2013-8-7 07:07
值得学习ing!

哥们,什么得技术分




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2