一、根据程序写输出结果,考察执行顺序
class Student {
static {
System.out.println("Student 静态代码块");
}
{
System.out.println("Student 构造代码块");
}
public Student() {
System.out.println("Student 构造方法");
}
}
class StudentTest {
static {
System.out.println("StudentTest静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Student s1 = new Student();
Student s2 = new Student();
}
}
测试结果:
StudentTest静态代码块
我是main方法
Student 静态代码块
Student 构造代码块
Student 构造方法
Student 构造代码块
Student 构造方法
分析:
main方法是Java程序的入口,JVM先找main方法;
先把有main方法的类加载到内存中,此时StudentTest类的静态代码块直接随着类的加载而先执行;
随后main方法开始执行,当Student类被实例化后,Student类的静态代码块先执行,并且只执行一次,不管实例化多少对象;
之后,每实例化一次Student类,类中的构造代码块比构造方法就会先执行,并且每实例化一次就执行一次。
### 只要是加载该类,静态代码块直接随着类的加载而先执行;###
二、类成员加载顺序
静态块(静态变量)——>成员变量——>构造代码块——>构造方法——>调用静态方法
end.