package test;
class AA {
{
System.out.print("3");
}
static {
System.out.print("1");
}
public AA() {
System.out.print("2");
}
}
class BB extends AA{
{
System.out.print("4");
}
static {
System.out.print("a");
}
public BB() {
System.out.print("b");
}
}
public class Hello {
public static void main(String[] args) {
AA ab = new BB();
AA cd = new BB();
}
}
class AA {
{
System.out.print("3");
}
static {
System.out.print("1");
}
public AA() {
System.out.print("2");
}
}
class BB extends AA{
{
System.out.print("4");
}
static {
System.out.print("a");
}
public BB() {
System.out.print("b");
}
}
public class Hello {
public static void main(String[] args) {
AA ab = new BB();
AA cd = new BB();
}
}
1a324b324b
可以看出静态代码块只会被加载一次
总的执行顺序为:
父类静态代码块 子类静态代码块 父类非静态代码块 父类构造函数 子类非静态代码块 子类构造函数