class Ali {
private static int k = 0;
private static Ali t3;
private static Ali t1 = new Ali("t1");
private static Ali t2 = new Ali("t2");
private static int i = print("i");
static {
print("静态块");
}
private static int n = 99;
{
print("构造块");
}
public Ali(String s) {
System.out.println(++k + ":" + s + " i:" + i + " n:" + n);
}
private static int print(String s) {
System.out.println(++k + ":" + s + " i:" + i + " n:" + n);
n++;
return ++i;
}
public static void main(String[] args) {
Ali t = new Ali("init");
}
}
1:构造块 i:0 n:0
2:t1 i:1 n:1
3:构造块 i:1 n:1
4:t2 i:2 n:2
5:i i:2 n:2
6:静态块 i:3 n:3
7:构造块 i:4 n:99
8:init i:5 n:100
1) 先装载Cat.class 到内存中
2) 静态成员初始化(静态代码块或静态属性) (只初始化一次)
3) 普通成员默认初始化,构造块执行(它们两个是平级的)
4) 构造函数执行
5) 在堆上开辟内存空间,然后把栈上的引用指向堆
Cat c;这个不会引起类中成员初始化