1、首先要知道这三种不同的代码快在结构上是什么样的区别,看下面简短的代码就能一清二楚。
2、了解了结构上的区别后,通过测试代码运行一下,让我们看下它们三者到底是谁先执行谁后执行。
3、通过上图我们可以得出结论三者执行的顺序是:静态代码块--->构造代码块---->构造方法,如果是new 多个对象呢?
或许你会认为应该是打印6条,但结果却是5条,这是为什么呢?因为静态代码块在执行一次后,就不再执行了。
4、在继承当中又会是什么样呢?看一下下面的测试代码就知道了。
5、总结
- 在创建一个对象的过程中,三者的执行顺序是:静态代码块 --> 构造代码块 --> 构造方法;
- 每创建一个对象,构造代码块和构造方法就会执行一次;而不管创建多少个对象,静态代码块仅仅执行一次;
- 创建子类对象时,子类的静态代码块在父类的静态代码块后面执行,但优先于父类的构造代码块和构造方法;
- 创建子类对象时,子类的构造代码块在父类的构造方法后执行