若有不正之处,请多多批评并指教。
先上代码:
父类的代码:
public abstract class ABSclass {
private static int b=3;
static{
int s=8;
System.out.println("父类静态块");
}
public ABSclass() {
b=b+3;
System.out.println("父类构造方法");
}
public ABSclass(int a) {
b=b+3;
System.out.println("带参数的父类构造方法");
}
{System.out.println("父类构造块");}
//i=i+3; 错 逻辑操作,要放在方法中执行
public abstract void m(int a);
private int me(){
return a;
};
private void me(int a){};
//i=i+4;
}
子类and 测试类的代码:
public class Test extends ABSclass {
public Test(){
System.out.println("子类构造方法");
}
public Test(int a){
System.out.println("A"+a);
}
{
System.out.println("子类构造块");
}
static{
System.out.println("子类静态块");
}
@Override
public void m(int a) {
// TODO Auto-generated method stub
System.out.println("继承");
}
public static void main(String[] args) {
new Test(2);
}
}
父类静态块
子类静态块
父类构造块
父类构造方法
子类构造块
A2
由上,我们可以知道他们执行的顺序:
1、父类的静态块或者变量 ,静态块和变量 按先后顺序初始化,即谁的代码行序越小谁越先;
2、子类的静态块和变量;
3、父类的构造块;
4、父类的无参构造方法;
5、子类的构造块;
6、子类的构造方法,子类的构造方法根据实例化的时候是否传入参数而定;