- 静态代码块 —> 构造代码块 —> 构造方法
- 在继承中:父类静态代码块 —> 子类静态代码块—>父类构造代码块—>父类构造方法—>子类构造代码块—> 子类构造方法
- 静态代码块只执行一次,就算后续二次创建也不会执行
//父类
public class Father {
public Father(){
System.out.println("父类构造方法");
}
{
System.out.println("父类构造代码块");
}
static{
System.out.println("父类静态代码块");
}
}
//子类
public class Son extends Father {
public Son(){
System.out.println("子类构造方法");
}
{
System.out.println("子类构造代码块");
}
static{
System.out.println("子类静态代码块");
}
public static void main(String[] args) {
System.out.println("——第一次创建子类对象——");
new Son();
System.out.println("——第二次创建子类对象——");
new Son();
}
}
//Demo类
public class Demo {
public static void main(String[] args) {
System.out.println("——第一次创建子类对象——");
new Son();
System.out.println("——第二次创建子类对象——");
new Son();
}
}
三种情况
- main函数放在demo类中
//运行结果
——第一次创建子类对象——
父类静态代码块
子类静态代码块
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
——第二次创建子类对象——
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
- main函数放在父类中
//运行结果
父类静态代码块
——第一次创建子类对象——
子类静态代码块
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
——第二次创建子类对象——
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
- main函数放在子类类中
//运行结果
父类静态代码块
子类静态代码块
——第一次创建子类对象——
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法
——第二次创建子类对象——
父类构造代码块
父类构造方法
子类构造代码块
子类构造方法