public class Lei {
private static int n=num1();
private static int m=2;
private int k=num2();
private int h=8;
//类的加载和对象的初始化顺序:1.Lei一加载,有了两个属性,n,m,默认初始值都为0,
//并对n,m进行了静态的声明初始化,执行num1(): 输出m:0, 此时m=2;n=1;
//2.接着执行静态代码块(static{}) 输出m:2 此时 m=3,仅执行一次 -----类的加载完毕
//执行主函数:fun(),执行new Lei():此时n=1,m=3,对象又有了两个属性k n:k=0,h=0
//对k,h进行声明初始化:执行num2(): 输出0,此时k=1;h=8;
//执行构造代码块: 输出h:8 此时h=9 创建一次对象执行一次,在创建对象的时候才调用
//执行构造函数 : 输出mh:39
//再次创建对象同上:输出0839
//结果为:0208390839
static{
System.out.println("b:"+m);
m=3;
}
static void fun(){}
{
System.out.println(h);
h=9;
}
Lei(){
System.out.print(m);
System.out.println(h);
}
int num2() {
System.out.println("c:"+h);
return 1;
}
static int num1() {
System.out.println("a:"+m);
return 1;
}
public static void main(String[] args) {
fun();
new Lei();
new Lei();
}
}
里面的abc是我标记用的
输出结果为: