之前被面试问到父子类静态代码块、非静态代码块、构造函数
一直以来我我认为这三者的执行顺序是静态代码块、非静态代码块、构造函数。
网上搜了下也都是这么说的。
就像下面这段代码:
- public
class ExA { -
static { -
System.out.println("父类--静态代码块"); -
} -
-
public ExA() { -
System.out.println("父类--构造函数"); -
} -
-
{ -
System.out.println("父类--非静态代码块"); -
} -
-
public static void main(String[] args) { -
new ExB(); -
} - }
-
- class
ExB extends ExA { -
static { -
System.out.println("子类--静态代码块"); -
} -
{ -
System.out.println("子类--非静态代码块"); -
} -
-
public ExB() { -
System.out.println("子类--构造函数"); -
} - }
执行结果
=====
父类--静态代码块
子类--静态代码块
父类--非静态代码块
父类--构造函数
子类--非静态代码块
子类--构造函数