比較的對象:靜態代碼塊、非靜態代碼塊、構造方法、一般方法;
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執行的順序:父類的靜態代碼塊=>子類的靜態代碼塊=>父類的普通代碼塊=>父類的構造方法=>子類的普通代碼塊=>子類的構造方法=>子類的普通方法=>父類的普通方法;