- /*
- Java静态变量初始化遵循以下规则:
- 静态变量会按照声明的顺序先依次声明并设置为该类型的默认值,但不赋值为初始化的值.
- 声明完毕后,再按声明的顺序依次设置为初始化的值,如果没有初始化的值就跳过.
- */
- class StaticDemo {
- public static void main(String[] args) {
-
- Demo1 d = Demo1.getInstance();
- System.out.println(d.count1+"......."+d.count2);
- }
- }
- class Demo1{
- //private static Demo1 d = new Demo1();
- /*在此处,new Demo1,有规则知,内存在还没有对count1,count2初始化,所以默认值为0;
- 所以:打印:
- 0...构造函数前...0
- 1...构造函数后...1
- 接着初始化count1和count2为5和6
- 执行static
- {
- }中的代码打印出
- 5...静态代码块前...6
- 6...静态代码块后...7
- 然后在执行new Demo1 打印出
- 6...构造函数前...7
- 7...构造函数后...8
- 最后执行main函数中的getInstance()并打印得到结果:
- 7.......8
- */
- public static int count1=5;
- public static int count2=6;
- //private static Demo1 d = new Demo1();
- /*
- 初始化语句在此处
- 此时:
- count1 count2先初始化 为5 和 6
- 然后 d 初始化
- 5...构造函数前...6
- 6...构造函数后...7
- 执行static区代码
- 6...静态代码块前...7
- 7...静态代码块后...8
- h初始化
- 7...构造函数前...8
- 8...构造函数后...9
- 最后main方法中的代码执行
- 8.......9
- */
-
- private Demo1(){
- System.out.println(count1+"...构造函数前..."+count2);
- count1++;
- count2++;
- System.out.println(count1+"...构造函数后..."+count2);
- }
-
- static{
- System.out.println(count1+"...静态代码块前..."+count2);
- count1++;
- count2++;
- System.out.println(count1+"...静态代码块后..."+count2);
- }
- private static Demo1 h = new Demo1();
-
- public static Demo1 getInstance(){
- return d ;
- }
- }
复制代码 你试着看分析其他情况,希望能帮到你。 |