java程序初始化顺序(清晰明了)

package practice;

class A{  
	static {  
		System.out.println("A静态块");  
	}  
	{  
		System.out.println("A构造快");  
	}  
	public A(){  
		System.out.println("A无参构造器");  
	}  
}  
class B extends A{  
	static {  
		System.out.println("B静态块");  
	}  
	{  
		System.out.println("B构造快");  
	}  
	public B(){  
		System.out.println("B无参构造器");  
	}  
}  
public class e3{  
	public static void main(String[] args){  
		A a=new B();
		System.out.println("----------------");  
	    B b=new B();
	}  
} 

运行结果: 

java程序初始化顺序(清晰明了)_第1张图片

总结:

顺序: 
父类(静态域按顺序加载)–>子类(静态域按顺序加载) –>父类(非静态变量,非静态代码块,构造函数)–>子类(非静态变量,非静态代码块,构造函数) 
静态域:静态变量和静态块

  (1)静态域是按先后顺序加载的 

(2)当static变量初始化的时候先去调用构造块,再去调用构造函数(因为静态域只能加载一次,这是第二次去加载的话,就直接调用构造块和构造器了) 

 (3)静态域只能被调用一次,第二次创建B的时候就直接用构造块和构造器初始化了

你可能感兴趣的:(Java学习,Java学习)