super > static变量|static代码块 >普通变量 |普通代码块>构造方法 > 普通方法
同级之间执行 从上到下的顺序
如果父类和子类都有static代码块,先将父类代码块执行完再子类代码块,然后父类所以方法从上到下执行完,执行子类方法。子类如果还有static变量,即为先将父类代码块执行完再子类代码块,再静态变量,再进入父类执行方法。
子类重写不能小于父类方法访问权限的范围
子类不能抛出比父类更广泛的异常
以下代码的输出结果是?
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();
}
}
解析:
并不是静态块最先初始化,而是静态域,静态域中包含静态变量、静态块和静态方法,其中需要初始化的是静态变量和静态块,但是内部代码还未执行。
而他们两个的初始化顺序是靠他们俩的位置决定的,static代码块是类加载时就初始化了,但是内部代码还未执行,先执行静态变量的,由于类已经加载过了,所有static变量构建的对象只执行普通代码块,执行完毕再出来执行static代码块的代码。
答案:构造块 构造块 静态块 构造块