首先我们构造一个类:
public class StaticTest{
private StaticTest() {
System.out.println("构造函数调用");
} //构造方法
int b;//普通成员变量
static int a;//静态成员变量
{
System.out.println("普通代码块调用");
}
static{
System.out.println("静态代码块调用");
}
static void f(){
System.out.println("静态方法调用");
}
void g(){
System.out.println("普通方法调用");
}
public static void main(String[] args) {
System.out.println("new StaticTest()");
StaticTest s = new StaticTest();
}
}
将上诉代码的每一行语句都打上断点,一步步调试发现有以下结论:
- 静态成员变量初始化
- 静态代码块语句
- 静态成员变量赋值等
- 普通成员变量初始化
- 普通代码块语句
- 普通成员变量赋值等
- 一般方法则在调用时执行
如果存在继承的情况下,则按照1、2、3的顺序从父类到子类依次执行。