package day20230319;
public class Base1 {
public Base1() {
System.out.println("Base我是构造方法");
}
{
System.out.println("Base我是实例代码块");
}
static {
System.out.println("Base我是静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Base1 b = new Base1();
}
}
在Base1(无继承时),执行顺序为,静态代码块>main方法>实例代码块>构造方法。
我们此时再额外添加一个子类继承Base1
package day20230319;
public class Derived1 extends Base1{
public Derived1() {
super();
System.out.println("Derived我是构造方法");
}
{
System.out.println("Derived我是实例代码块");
}
static {
System.out.println("Derived我是静态代码块");
}
public static void main(String[] args) {
System.out.println("我是main方法");
Derived1 b1 = new Derived1();
Derived1 b2 = new Derived1();
}
}
在子类中执行main方法(有继承时),由得到的结果可以看出。在创建b1时先执行了Base和Derived的静态代码块,在创建b2时没有执行。由此顺序为:{基类静态代码块>子类静态代码块}(两者只在第一次创建对象时执行一次)>main方法>基类实例代码块>基类构造方法>子类实例代码块>子类构造方法>基类实例代码块>基类构造方法>子类实力代码块>子类构造方法