static块内的代码只在JVM第一次加载该类的时候运行,而构造函数不一样,他在每次new YSF()的时候调用
public class staticblock {
private static int i = 0;
public static void main(String[] args) {
System.out.println("main block start");
i++;
System.out.println("main block end");
}
static{
System.out.println("static block");
}
}
输出结果:
static block
main block start
main block end
初始化的步骤
静态的
step 1.对有初始值的Static变量赋值 ,其次序为从祖先类到当前类依次赋值
step 2.从祖先类到当前类中的每个类型,依次执行 step 3
step 3. 对类形中所有有初始值的非static的变量,设置初始值;
非static的变量
1. 开始分配分配成员变量的存储空间并进行默认的初始化.就是执行new 关键字。
2. 显示显式或隐式追溯调用父类的构造方法(一直到Object类为止);
3. 进行成员变量的显式初始化操作,也就是执行在定义成员变量时就对其进行赋值的语句.
4 调用child() 这个构造函数
所以可以认为初始化有三次
--转自
该贴由koei123转至本版2015-7-14 11:05:51