java的父子类加载顺序

若有不正之处,请多多批评并指教。

先上代码:

父类的代码:

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、子类的构造方法,子类的构造方法根据实例化的时候是否传入参数而定;

你可能感兴趣的:(javaSE)