若类还未被加载
- 先执行父类的静态代码块和静态变量初始化,并且静态代码块和静态变量的执行顺序只跟代码中出现的顺序有关。
- 执行子类的静态代码块和静态变量初始化。
- 执行父类的实例变量初始化和普通代码块,,并且代码块和实例变量的执行顺序只跟代码中出现的顺序有关。
- 执行父类的构造函数
- 执行子类的实例变量初始化和普通代码块,,并且代码块和实例变量的执行顺序只跟代码中出现的顺序有关。
- 执行子类的构造函数
若类已经加载
则静态代码块和静态变量就不用重复执行,再创建类对象时,只执行与实例相关的变量初始化和构造
package com.huangxin.test;
public class CodeExeOrder {
public static void main(String[] args) {
B b=new B();
System.out.println("-----");
//类已经加载不在执行,则静态代码块和静态变量就不用重复执行,
//再创建类对象时,只执行与实例相关的变量初始化和构造方法
A a=new B();
}
}
class A {
//静态代码块
static {
System.out.println("父类的静态代码块");
}
//代码块
{
System.out.println("父类的代码块");
}
public A() {
System.out.println("父类的构造方法");
}
}
class B extends A{
//静态代码块
static {
System.out.println("子类的静态代码块");
}
//代码块
{
System.out.println("子类的代码块");
}
public B() {
System.out.println("子类的构造方法");
}
}
image.png
网友评论