直接上代码 java
public class Study { public Study(){//构造方法 System.out.println("init"); } {//构造代码块 System.out.println("hehe"); } static {//静态代码块 System.out.println("haha"); } public static void main(String[] args) { Study s1 = new Study(); Study s2 = new Study(); } }
执行结果code
结论:1)静态代码块优先执行而且只执行一次。2)构造代码块优先构造方法执行,而且每次调用构造方法都会执行。blog
在继承的状况下继承
public class Study { public Study(){//构造方法 System.out.println("老子构造方法"); } {//构造代码块 System.out.println("老子构造代码块"); } static {//静态代码块 System.out.println("老子静态代码块"); } public static void main(String[] args) { Study s1 = new Study1(); Study s2 = new Study1(); } } class Study1 extends Study{ public Study1(){//构造方法 System.out.println("儿子构造方法"); } {//构造代码块 System.out.println("儿子构造代码块"); } static {//静态代码块 System.out.println("儿子静态代码块"); } }
结论:1)静态代码块老是优先执行。2)父类构造块构造方法优先子类构造块构造方法。it