比较的对象:静态代码块、非静态代码块、构造方法、一般方法;
public interface AInterface {
public void sayA();
public void sayB();
}
public class BClass implements AInterface{
BClass(){
System.out.println("BClass Construction method");
}
static{
System.out.println("BClass static method");
}
{
System.out.println("BClass Before");
}
@Override
public void sayA() {
System.out.println("BClass sayA............");
}
@Override
public void sayB() {
System.out.println("BClass sayB............");
}
{
System.out.println("BClass After");
}
}
public class CClass extends BClass{
CClass(){
System.out.println("CClass Construction method");
}
static {
System.out.println("CClass static method");
}
{
System.out.println("CClass Before");
}
@Override
public void sayA() {
System.out.println("CClass sayA............");
}
{
System.out.println("CClass After");
}
}
再来一个测试类:
public class TestDemo {
public static void main(String[] args) {
AInterface cClass = new CClass();
cClass.sayA();
cClass.sayB();
}
}
执行结果:
BClass static method
CClass static method
BClass Before
BClass After
BClass Construction method
CClass Before
CClass After
CClass Construction method
CClass sayA............
BClass sayB............
所以我们可以得出如下的结论:
java执行的顺序:父类的静态代码块=>子类的静态代码块=>父类的普通代码块=>父类的构造方法=>子类的普通代码块=>子类的构造方法=>子类的普通方法=>父类的普通方法;