现在这篇里,包括静态块和构造块等的执行顺序。
1.一个栗子:
输出为:构造块 构造块 静态块 构造块
解释:
静态块:用static申明,JVM加载类时执行,仅执行一次;
构造块:类中直接用{}定义,每一次创建对象时执行;
执行顺序优先级:静态块>main()>构造块>构造方法;
静态块按照声明顺序执行,所以先执行publicstaticB t1 = newB();
该语句创建对象,则又会调用构造块,输出构造块;
接着执行public static B t1 = new B();输出构造块;
再执行static{System.out.println("静态块");}
输出静态块;
最后main方法执行,创建对象,输出构造块。
2.另一个栗子:
当涉及到继承时,按照如下顺序执行:
(1)执行父类的静态代码块
static {
System.out.println(“static A”);
}
输出:static A
(2)执行子类的静态代码块
static {
System.out.println(“static B”);
}
输出:static B
(3)执行父类的构造代码块
{
System.out.println(“I’m A class”);
}
输出:I’m A class
(4)执行父类的构造函数
public HelloA() {
}
输出:无
(5)执行子类的构造代码块
{
System.out.println(“I’m B class”);
}
输出:I’m B class
(6)执行子类的构造函数
public HelloB() {
}
输出:无
那么,最后的输出为:
static A
static B
I’m A class
I’m B class