类初始化总结
public class demo{
public static int salary=getSalary();//静态变量
private int workage=getworkage();//实例变量
static {//静态代码块
System.out.print(1);
}
private static int getSalary() {//静态方法
System.out.print(2);
return 2000;
}
public demo() {//构造方法
System.out.print(3);
}
{//示例代码块
System.out.print(4);
}
private int getworkage() {//非静态方法
System.out.print(5);
return 12;
}
public static void main(String []args) {
new demo();
new demo();
System.out.print(6);
}
}
运行结果
215435436
从以上结果我们可以看到类的加载过程,是先从上到下执行静态代码块,然后执行其他方法,当第一次执行new demo()时,先从上到下执行静态代码块,先打印2,后打印1,然后执行实列代码块,最后执行构造方法,所以打印顺序为543,然后执行第二个new demo()时,由于静态变量与方法已经加载完成,所以不再执行。
public class demo{
static int a=10;
public demo() {
a=100;
}
public static void main(String []args) {
new demo();
System.out.print(a);
}
}
结果
100
变量加载过程中首先会分配内存,并赋值(这里的值是0,而不是10),然后在初始化中先赋值10,然后调用构造方法赋值100。