非继承关系下它们的执行顺序
public class Main {
{
System.out.println("实例代码块");
}
static {
System.out.println("静态代码块");
}
public Main() {
System.out.println("构造方法执行");
}
public static void main(String[] args) {
Main main1 = new Main();
System.out.println("-------------------");
Main main2 = new Main();
}
}
结果:
结论:执行优先顺序:静态代码块 > 实例代码块 > 构造方法、
*1:静态代码块只在类加载阶段执行一次
*2:当有对象创建时,实例代码块和构造方法先后执行
继承关系下父类和子类的实例,静态,构造执行顺序
//父类
class Parents{
{
System.out.println("父类静态代码块");
}
static {
System.out.println("父类静态代码块");
}
public Parents() {
System.out.println("父类构造方法");
}
}
//子类
class Child extends Parents{
{
System.out.println("子类实例代码块");
}
static{
System.out.println("子类静态代码块");
}
public Child() {
System.out.println("子类构造方法");
}
}
public class Main {
public static void main(String[] args) {
Child child = new Child();
System.out.println("-------------------");
Child child1 = new Child();
}
}
结论 :执行优先级顺序:父类静态代码块 > 子类静态代码块 > 父类实例代码块 > 父类构造方法 > 子类实例代码块 > 子类构造方法
*静态代码块只在类加载阶段执行一次