Java代码块的执行顺序

Java程序中代码块的执行顺序对于学习Java的人来说是必不可少需要掌握的。

代码块

在Java中,使用{}括起来的代码被称为代码块。

根据其位置和声明的不同,可以分为:

  • 局部代码块
  • 构造代码块
  • 静态代码块

执行顺序

首先执行静态代码块
接着执行构造代码块
最后指向构造方法

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

考虑Java中关于继承的情况,这子类和父类的执行顺序稍有变化:

Created with Raphaël 2.1.2开始执行父类静态代码块子类的静态代码块父类的构造代码块父类的构造方法子类的构造代码块子类的构造方法结束

当一个类被JVM装载后各种代码块的执行顺序大致如下:

Created with Raphaël 2.1.2类被JVM装载执行父类相关的代码是否有静态初始化执行静态初始化,且只执行一次,即使后面再有该类的实例化也不会再执行是否有静态代码块同执行静态初始化一样执行静态代码块new语句带来的实例化,先为成员变量分配空间,并绑定参数列表,隐式或显式地执行super(),即父类的构造方法执行非静态代码块执行本类的构造方法执行其他代码结束yesnoyesno

这里的执行顺序同子类构造中有一个默认的父类构造super()无关,不是执行到隐藏的super()才开始初始化父类的,类的初始化是分层初始化,即先初始化父类,再初始化子类,初始化每个类的过程中,进行类的初始化工作,先进行成员变量的初始化,成员变量的初始化顺序是:默认初始化,即int为0这种->显示初始化,例如给int型显示初始化了值->构造方法初始化,所以是这里执行到了构造方法。

但是一定要注意,父类初始化选择的构造方法却和子类中super 选择的构造相关,下面代码很好的解释了这点。

测试代码

package com.chen;public class People {{System.out.println("父类构造代码块");}static {System.out.println("父类静态代码块");}public People() {System.out.println("父类构造代码块");}public People(String str){System.out.println("父类含参构造方法");}
}
package com.chen;public class Student extends People{{System.out.println("子类构造代码块");}static {System.out.println("子类静态代码块");}public Student() {//super(null);  System.out.println("子类构造代码块");}public static void main(String[] args) {new Student();}
}

执行结果为:

父类静态代码块
子类静态代码块
父类构造代码块
父类构造代码块
子类构造代码块
子类构造代码块

注:
如果取消 super(null); 的注释,那么执行结果会发生变化,在选择父类的构造方法的时候会选择含参构造方法,执行结果为:

父类静态代码块
子类静态代码块
父类构造代码块
父类含参构造方法
子类构造代码块
子类构造代码块

Java笔记——Java代码块的执行顺序相关推荐

  1. Java(静态)变量和(静态)代码块的执行顺序

    为什么80%的码农都做不了架构师?>>>    本文讨论Java中(静态)变量.(静态)代码块的执行顺序 首先创建3个类: //1.Foo类,用于打印变量 public class ...

  2. java构造方法,构造代码块,静态代码块的执行顺序

    构造方法,构造代码块,静态代码块的执行顺序 静态代码块:用static声明,jvm加载类时执行,仅执行一次 类中直接用{}定义,每次创建对象时执行 同级别的变量(static和普通变量)的执行顺序由代 ...

  3. java 静态块初始化_简单了解java中静态初始化块的执行顺序

    这篇文章主要介绍了简单了解java中静态初始化块的执行顺序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在java中,其应该是先于所有的方法执行. ...

  4. 举例说明Java中代码块的执行顺序

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 结论     这里先把整理好的结论抛给大家,然后我在写个程序来验证我们的结论.在Java类被new的 ...

  5. java中this_夯实Java基础系列7:一文读懂Java 代码块和执行顺序

    目录 #java中的构造方法 #构造方法简介 #构造方法实例 #例-1 #例-2 #java中的几种构造方法详解 #普通构造方法 #默认构造方法 #重载构造方法 #java子类构造方法调用父类构造方法 ...

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

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

  7. 关于静态代码块的执行顺序,很简单的一道题,应该所有人都会吧?

    之前面试的时候做过代码块和构造方法的执行顺序,当时虽然半蒙半猜作对了,但是对这个还不是特别的了解,所以就想看看今天能不能彻底搞懂,即帮助大家.也帮助自己. 简单题 9 ++ 在 Java 中有静态代码 ...

  8. 牛客网Java刷题知识点之什么是代码块、普通代码块、静态代码块、同步代码块、构造代码块以及执行顺序...

    不多说,直接上干货! 这种形式的程序段我们将其称之为代码块,所谓代码块就是用大括号({})将多行代码封装在一起,形成一个独立的数据体,用于实现特定的算法.一般来说代码块是不能单独运行的,它必须要有运行 ...

  9. java中构造函数-静态代码块-代码块的执行顺序

    面试题中,经常遇到这种题,我们只要记住一个原则,就不会出错. 三者的执行顺序:静态代码块>代码块>构造函数 package com.lbl.constructor;/*** Created ...

最新文章

  1. [CodeForces 300D Painting Square]DP
  2. ASP.NET常用语句(转载)
  3. CCIE理论-第十五篇-IPV6-重分布+ACL+前缀列表
  4. 工作流实战_28_flowable 任务多实例
  5. 什么是Docker??
  6. 虚拟服务器数据库怎么导入数据库,BlueHost虚拟主机使用SSH怎么导入MySQL数据库...
  7. html隐藏标签console,console的隐藏知识点,你get到了嘛?
  8. 远程服务器停止运行怎么回事,远程桌面连接已停止工作解决方法
  9. 浅谈编程能力的培养与提高——写给编程初学者的话
  10. 广东计算机一级试题答案,广东计算机一级考试试题和答案
  11. 返款接口教程,转账到支付宝账户开通方法
  12. ElementUI 文本内容不能自动换行,内容超出显示(遇到中文、空格才会换行)
  13. 第十一天: SD卡原理分析及SD卡启动详解
  14. vue3 ref 和 reactive 区别
  15. A Vertical Kelvin Test Structure for Measuring the True Specific Contact Resistivity
  16. 关于WIN10装CH340驱动的一些小小的注意事项
  17. 华为机试 经验(血泪史啊)
  18. 克服三分钟热度的状况 训练自己养成习惯不半途而废
  19. 计算Yocto中LIC_FILES_CHKSUM的md5值
  20. java语言【 #93. 温度换算】(已通过)

热门文章

  1. 字符缓冲流特有功能复制Java文件
  2. 分布式缓存Redis介绍
  3. 循环尝试,不释放CPU
  4. 方法级权限控制-基于表达式操作
  5. ES6新特性之转码器(UmiJS入门)
  6. 响应json数据之响应json格式数据
  7. Response_案例1_路径_绝对路径
  8. 三种实现分布式解决方案原理分析
  9. SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建
  10. Oracle之事务和锁