public class Test
{
public static Test t1 = new Test();//静态区域 从上到下
//父类先执行这句,又实例化了一个对象 先--> 构造代码快 --> 再执行构造函数
//这一句输出了 blockA--> c -->
//按照顺序执行最下方的静态代码块 输出了 blockB--->父类的静态区域加载完毕-->转去子类的静态区
{
System.out.println("blockA");
}
public Test() {
System.out.println("c");
}
static
{
System.out.println("blockB");
}
}
子类…………
public class TesT2 extends Test{
public static int x=3;
//子类的静态区(从上到下)先执行--> x=3 -->再去执行静态代码快 输出 静态代码块:3
static {
System.out.println("静态代码块:"+x);
}
//子类的静态区域执行完毕 实例化一个子类的对象,由于子类的空参构造 或是有参构造的方法体里面第一条代码 默认隐藏了super();
//super() 是父类的空参构造,执行空参构造-->执行构造构造代码块 输出-->blockA-->执行构造函数-->输出 -->c
//先去加载父类的构造代码块 输出-->blockA-->父类的空参构造方法
//然后是子类的构造代码块--输出-->构造代码块-->然后再是空参构造方法
{
System.out.println("构造代码块");
}
public TesT2() {
//默认隐藏的super();
//在用快捷键 生成 构造函数的时候 都是有的
System.out.println("空参构造函数");
}
public static void main( String[] s) {
TesT2 ts = new TesT2();
}
}
执行结果为:
blockA
c
blockB
静态代码块:3
blockA
c
构造代码块
空参构造函数