1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 静态代码块 构造代码块 构造方法的执行顺序

静态代码块 构造代码块 构造方法的执行顺序

时间:2021-11-28 17:31:39

相关推荐

静态代码块 构造代码块 构造方法的执行顺序

今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题

执行顺序:

静态代码块>构造代码块>构造方法体

首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载

当时做了这么一个小案例(想必这个大多数学java的都做过,不知道是否都理解了)

class Fu{static {System.out.println("Fu static code");}{System.out.println("Fu code");}public Fu(){System.out.println("Fu GouZao");}}class Zi extends Fu{static {System.out.println("Zi static code");}{System.out.println("Zi code");}public Zi(){System.out.println("Zi GouZao");}}public class Text{public static void main(String[] args) {Zi zi = new Zi();}}

在编译时,先加载了Fu类,因此Fu类的静态代码块首先执行,而后加载Zi类,Zi类的静态代码块执行,这没什么好说的。

然后创建Zi的对象,大家都知道构造代码块优先于构造方法执行,这时候问题来了,这时应该先看Zi类的构造方法,Zi类里的构造方法里有一句隐式的super()首先被执行,所以找到Fu类的构造方法,而Fu类的构造方法中也有一句隐式的super()执行(调用Object类的构造方法),并没有什么返回结果。

接下来才是在执行Fu类构造方法的方法体前先执行了Fu类的构造代码块(Fu code)。

再执行Fu类构造方法的方法体(也就是Fu GouZao),最后又回到Zi类的构造方法中,这时Zi类的super()已经执行完了,在执行Zi类构造方法的方法体前先执行Zi类的构造代码块(Zi code),再执行Zi类构造方法的方法体(Zi GouZao)。

最后的结果是:

Fu static codeZi static codeFu codeFu GouZaoZi codeZi GouZao

不知道大家绕晕了没有,我在这再总结一下:

静态的是与类有关,肯定先加载,而构造代码块执行前要先看构造方法中是否有this()或super(),有的话在其之后执行,最后执行构造方法的方法体。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。