第一次new,则会加载对应的class到方法区,再次new则直接从方法区取对应的class。
加载class的顺序:先父后子
关注点:静态变量、静态代码块、非静态代码块、构造方法,执行的顺序
public class TestOrder {
public static void main(String[] args) {
Child child = new Child();
Child child2 = new Child();
}
}
class Child extends Parents {
static int num;
static {
System.out.println("我是子类静态代码块 : " + num);
}
{
System.out.println("我是子类非静态代码块");
}
public Child() {
System.out.println("我是子类构造方法");
}
}
class Parents {
static int num;
static {
System.out.println("我是父类静态代码块 : " + num);
}
{
System.out.println("我是父类非静态代码块");
}
public Parents() {
System.out.println("我是父类构造方法");
}
}
结果:
我是父类静态代码块 : 0
我是子类静态代码块 : 0
我是父类非静态代码块
我是父类构造方法
我是子类非静态代码块
我是子类构造方法
我是父类非静态代码块
我是父类构造方法
我是子类非静态代码块
我是子类构造方法