执行结果:
有没有大佬知道 第一次加载类的时候,静态代码块是个什么状态?
静态代码块:用于给类初始化,类加载时就会被加载执行,只加载一次。
构造代码块:用于给对象初始化的。只要建立对象该部分就会被执行,且优先于构造函数。
构造函数: 给对应对象初始化的,建立对象时,选择相应的构造函数初始化对象。
创建对象时,三者被加载执行顺序:静态代码块--->构造代码块--->构造函数
/**
* 1.static test t1 = new test();
* 输出:
* 代码块
* 0 //c 还没赋值默认0
* 构造方法
*
* 2.static {
* c = 2;
* System.out.println("静态代码块");
* }
* 输出:
* 静态代码块
*
* 3.test t2 = new test();
* 代码块
* 2 //c已经赋值
* 构造方法
*
*
*/
加载的时候不能单看静态代码块,而是把静态的部分当成 静态域 这个一个整体,静态域包括静态变量,静态方法,静态块 , 加载的时候把他们看成一个整体
1.static test t1 = new test(); 先去加载 test 类,
2.初始化第一个静态变量 t1, 这时候会调用构造块和构造方法 输出:0,代码块、构造方法
代码块始终会在构造函数之前执行,因为没有构造函数,所以走默认的构造函数,为啥静态块没有走?像我们刚才说的静态域已经执行了静态变量,如果再执行静态代码块就属于静态域重复执行,这样加载就会混乱!
3.静态变量初始化完毕了,然后执行静态代码块 , 输出:静态代码块
4.test t2 = new test(); 会调用无参构造,所以代码块会先执行 输出:2,代码块、构造方法