public class B
{
public static B t1 = new B();
public static B t2 = new B();
{
System.out.println("构造块");
}
static
{
System.out.println("静态块");
}
public static void main(String[] args)
{
B t = new B();
}
}
A、静态块 构造块 构造块 构造块
B、构造块 静态块 构造块 构造块
C、构造块 构造块 静态块 构造块
D、构造块 构造块 构造块 静态块
静态块:用static申明,JVM加载类时执行,仅执行一次
构造块:类中直接用{}定义,每一次创建对象时执行
执行顺序优先级:
1、父类静态(代码块,变量赋值二者按顺序执行)
2、子类静态
3、父类构造代码块
4、父类构造方法
5、子类构造代码块
6、子类构造方法
- main函数属于静态子类代码块
静态块按照申明顺序执行,所以先执行父类静态代码块public static B t1 = newB();该语句创建对象,则又会调用构造块,输出构造块
接着执行public static B t1 = new B();输出构造块
再执行
static
{
System.out.println(“静态块”);
}输出静态块
最后main方法执行,创建对象,输出构造块。