欢迎来到河南丰泽教育咨询有限公司官网!

河南IT培训领导品牌    全国咨询热线:0371-63614567

丰泽教育logo
当前位置: 首页 > 新闻 > Java技术

Java中的非静态代码块、构造函数的执行顺序

Java技术    03.04.17/11人气/ 15推荐

我们来一段代码:



执行结果如下:

上面例子中,非静态代码块写在构造函数之后,但还是优先执行。
Java中当调用某个类的构造方法的时候,系统总会调用父类的非静态初始化块进行初始化,这个调用是隐式的。而且父类的静态初始化代码块总是会被执行,接着调用父类的一个或者多个构造器进行初始化,这个调用也可以通过super进行显示调用,之后再执行子类的非静态代码块和构造方法。

我们再来看一段更为复杂的代码:


子类Son类里调用SonProp,而另一个子类SonProp又继承另一个父类FatherProp。下面我们来观察一下执行结果:


最先执行的是父类的非静态方法,然后是Father类的构造方法,再执行SonPro类(这里的顺序依然是先代码块再构造方法)。

我把Son类中调用SonProp类的顺序放在构造方法之后,会有什么变化呢?
郑州JAVA培训

执行结果:
郑州JAVA培训

我们可以看到,Son类中的非静态代码块在父类数据初始化后执行。而调用的其他类Sonpro中初始化数据优先本类Son中的构造方法。

大家有没有注意到,两个父类Father与FatherProp类中我增加了普通方法。由于普通方法Father与FatherProp并无继承关系,所以print()方法并没有被覆写。普通方法的执行顺序是在实例化调用后。我们也可以看出FatherProp类的print()方法并没有执行,之后我换成静态方法,也依然没有执行。

如果再增加静态代码块呢?

这里小编就不再贴代码了,有兴趣的朋友可以试试。理论上来说,执行顺序如下(静态代码块 --> 非静态代码块 --> 构造函数)。但是静态代码块只在第一次new(或者只要访问了)就执行一次,之后不再执行,而非静态代码块在每new一次都会执行一次,跟构造函数一样。
11

点赞