有如下几个测试类
package arithmetic;
class Son extends Parent{
public Son(){
System.out.println("子类构造方法执行");
}
{
System.out.println("子类构造代码块执行");
}
static{
System.out.println("子类静态代码块执行");
}
}
class Parent{
public Parent(){
System.out.println("父类构造方法执行");
}
{
System.out.println("父类构造代码块执行");
}
static{
System.out.println("父类静态代码块执行");
}
}
只实例化Parent:
public class Demo {
public static void main(String[] args) {
Parent parent = new Parent();
}
}
父类静态代码块执行
父类构造代码块执行
父类构造方法执行
实例化两次Parent
public static void main(String[] args) {
Parent parent = new Parent();
Parent parent1 = new Parent();
}
父类静态代码块执行
父类构造代码块执行
父类构造方法执行
父类构造代码块执行
父类构造方法执行
可见。静态代码块只执行了一次,只是应为static在类加载时就已经执行了,不管实例化几次都只执行一次。
结论:对于单个类:Static{} > {} > constructor
当实例化子类时
public static void main(String[] args) {
Son son = new Son();
}
父类静态代码块执行
子类静态代码块执行
父类构造代码块执行
父类构造方法执行
子类构造代码块执行
子类构造方法执行
结论:父static > 子static > 父{} > 父constructor > 子{} > 子constructor