今天我总结了一下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 code
Zi static code
Fu code
Fu GouZao
Zi code
Zi GouZao

不知道大家绕晕了没有,我在这再总结一下:
静态的是与类有关,肯定先加载,而构造代码块执行前要先看构造方法中是否有this()或super(),有的话在其之后执行,最后执行构造方法的方法体。

静态代码块 构造代码块 构造方法的执行顺序相关推荐

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

    构造代码块.静态代码块.构造方法的执行顺序 牛客网上的一道题目: 通过查询,我写的这道题的解题步骤: package niukewang;/*** @author jxd* @date 2021/8/ ...

  2. [转载] Java静态代码块/构造代码块/构造函数/静态变量/成员变量(相关示例)

    参考链接: Java程序的输出| 构造函数 近期做牛客网的Java开发笔试题,发现这类型的题目较多,很容易混淆,特将相关概念和相关示例整理如下,供大家参考^_^ 1. 静态代码块在类加载时即运行,而且 ...

  3. java静态代码块、静态方法、静态变量、构造代码块、普通代码块、成员变量执行顺序

    package smartt.styy.auth.model.voRsp;public class Test {static {String test5="555";//局部变量t ...

  4. Static、构造代码块快、构造函数等的执行顺序

    前言 今天分享的是关于在程序中代码的执行顺序,零零散散写了很多随记,总结起来蛮费时间的,希望大家给个关注,多多关注新人哈,废话不多说,还是老规矩,代码穿插注释的总结方式. 1.代码执行顺序 /*** ...

  5. Java中构造函数,静态代码块,构造代码块的执行顺序

    静态代码块:用static声明,jvm加载类的时候执行,只执行一次. 构造代码块:由{}定义,每一次创建对象的时候执行. 构造函数:对象一建立就调用相应的构造函数. 静态代码块 1.它是随着类的加载而 ...

  6. html js页面加载前执行,Javascript代码在页面加载时的执行顺序介绍

    一.在HTML中嵌入Javasript的方法 1.直接在Javascript代码放在标记对之间 2.由标记的src属性制定外部的js文件 3.放在事件处理程序中,比如: 点击我 4.作为URL的主体, ...

  7. Java中构造方法的执行顺序

    2019独角兽企业重金招聘Python工程师标准>>> 一.先执行内部静态对象的构造方法,如果有多个按定义的先后顺序执行:静态对象在构造的时候也是也先执行其内部的静态对象. 二.再调 ...

  8. java 静态代码块和spring @value注解注入执行顺序

    https://blog.csdn.net/evo_steven/article/details/86005965

  9. java加载类时静态代码块、构造代码块、构造方法执行顺序

    构造代码块作用:https://blog.csdn.net/hspingcc/article/details/54893853 package com.spring.partise;class A{A ...

最新文章

  1. loss和accuracy的关系
  2. SDL及扩展库在ARM-Linux 完整移植
  3. thinkphp字符截取函数msubstr()
  4. python url加密_使用base64加密在URL传递(python和php版本)
  5. android sqlite 示例,android SQLite数据库使用示例
  6. iphonex如何关机_历时一个月,跨越一千里,我找回了在澳门被偷的iphoneX
  7. 关于JFace中的向导式对话框(WizardDialog类)
  8. [IOS]开源库RegexKitLite正则表达式的使用
  9. 机器学习:用正规方程法求解线性回归
  10. numpy教程:基本输入输出和文件输入输出Input and output
  11. linux5.4获取root权限,gcc++漏洞 普通用户获取root权限
  12. 印象笔记粘贴HTML,VScode下MarkDown如何连接印象笔记
  13. Android 调试桥 (adb)
  14. linux+psp+模拟器下载,PSP1.5模拟器全教程+最新版本下载(最终版)
  15. linux realtek声卡驱动下载,下载:Realtek HD Audio音频驱动2.06版
  16. html5图标用什么格式转换,ico转png 怎么把ico格式转换成png格式
  17. android手机误删短信恢复软件,安卓手机重要短信误删了是否可以找回
  18. DHCP 协议(一)
  19. No valid crumb was included in the request 问题定位与解决
  20. imu和mems的差别_MEMS加速度计,磁力计和定向角

热门文章

  1. fastDFS 命令笔记
  2. mysql中的where和having子句的区别
  3. IOS发送带附件的邮件
  4. OpenGL(二)三维变换
  5. ​618购物节,我用python逛淘宝、亚马逊,摸鱼被领导发现了
  6. 7z命令行参数详解--python暴破压缩文件命令必备
  7. 这N张模板,做出了秒杀echarts和python的可视化大屏,老板很满意
  8. linux编译lnx文件命令_Linux命令总结
  9. java list 效率_Java中5种List的去重方法及它们的效率对比,你用对了吗?
  10. caj格式转pdf的3种方法