java static 关键字的理解

2018-12-18  本文已影响0人  六味帝皇丸
1.类的加载顺序:父类的静态变量--》父类的静态方法--》子类的静态变量--》子类的静态方法---》父类的成员变量---》父类的构造方法(如果有够造块,则在构造方法前执行)--》子类的成员变量--》子类的构造方法
2.static只会加载一次,所以通俗点讲第一次new的时候,所有的static都先会被全部载入(以后再有new都会忽略),进行默认初始化。在从上往下进行显示初始化。这里静态代码块和静态成员变量没有先后之分,谁在上,谁就先初始化
public class TestStatic {

    private static int k = 0;

    public static TestStatic t1 = new TestStatic("t1");

    public static TestStatic t2 = new TestStatic("t2");
    private static int i = print("i");
    private static int n = 99;
    public int j = print("j");

    {
        print("构造块");
    }

    static {
        print("静态块");
    }

    private TestStatic(String str) {
        System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
        ++n;
        ++i;
    }


    private static int print(String str) {
        System.out.println((++k) + ":" + str + " i=" + i + " n=" + n);
        ++i;
        return ++n;
    }


    public static void main(String[] args) {
        TestStatic t = new TestStatic("init");
    }

}

上面main方法的运行顺序

  1. 执行int k =0;
  2. 执行new TestStatic("t1"); 他进去不初始化static成员变量,由new TestStatic("init");来初始化,先调用 public int j = print("j"); 执行pint 方法,再执行构块
    再执行静态块,再执行构造方法
    打印如下:
1:j i=0 n=0
2:构造块 i=1 n=1
3:t1 i=2 n=2

3.执行new TestStatic("t2"); 跟上面类似 ,打印如下:

4:j i=3 n=3
5:构造块 i=4 n=4
6:t2 i=5 n=5

4.执行 static int i = print("i"); 打印如下:

7:i i=6 n=6

5.执行private static int n = 99;
6.执行 静态块 打印:

8:静态块 i=7 n=99

7.执行成员变量 int j = print("j");

9:j i=8 n=100

8.执行构造块,打印:

10:构造块 i=9 n=101

9.执行构造方法

11:init i=10 n=102
上一篇下一篇

猜你喜欢

热点阅读