java中静态代码块、代码块、构造方法的加载顺序
测试代码如下:
package com.test;
public class StaticTest {
public static void main(String[] args) {
System.out.println("-------------new HelloB---------");
new HelloB();
System.out.println("-------------new HelloB---------");
new HelloB();
}
}
class HelloA{
public HelloA(){
System.out.println("HelloA 构造方法 ");
}
{
System.out.println("HelloA 代码块");
}
static{
System.out.println("HelloA 静态代码块");
}
}
class HelloB extends HelloA{
public HelloB(){
System.out.println("HelloB 构造方法");
}
{
System.out.println("HelloB代码块");
}
static{
System.out.println("HelloB 静态代码块");
}
}
执行输出结果:
-------------new HelloB---------
HelloA 静态代码块
HelloB 静态代码块
HelloA 代码块
HelloA 构造方法
HelloB代码块
HelloB 构造方法
-------------new HelloB---------
HelloA 代码块
HelloA 构造方法
HelloB代码块
HelloB 构造方法
可以看出执行顺序是:父类静态代码块->子类静态代码块->父类代码块->父类构造方法->子类代码块->子类构造方法
且:静态代码块只有在第一次加载类的时候回被调用