一直对构造代码块、静态代码块、无参构造函数和有参构造函数的执行顺序和执行次数混淆不清,所以记录一下它们的执行顺序以及执行次数。记录的不是很详细,留待补充。

代码:

package com.yoko.test1;
class FatherModel {{System.out.println("执行父类构造代码块");}static{System.out.println("执行父类静态代码块");}public FatherModel(){System.out.println("执行父类无参构造方法");}public FatherModel(String arg){System.out.println("执行父类有参构造方法");}
}
class SunModel extends FatherModel{{System.out.println("执行子类构造代码块");}static{System.out.println("执行子类静态代码块");}public SunModel(){System.out.println("执行子类无参构造方法");}public SunModel(String arg){System.out.println("执行子类有参数构造方法");}
}
public class Test1 {public static void main(String[] args) {System.out.println("创建父类实例,不考虑继承情况");FatherModel fatherModel1 = new FatherModel();System.out.println("------------------------------------------------------");FatherModel fatherModel2 = new FatherModel("abc");System.out.println("------------------------------------------------------");System.out.println("创建子类实例,考虑继承情况");SunModel sunModel1 = new SunModel();System.out.println("------------------------------------------------------");SunModel sunModel2 = new SunModel();System.out.println("------------------------------------------------------");SunModel sunModel3 = new SunModel("abc");}
}

运行结果:

创建父类实例,不考虑继承情况
执行父类静态代码块
执行父类构造代码块
执行父类无参构造方法
------------------------------------------------------
执行父类构造代码块
执行父类有参构造方法
------------------------------------------------------
创建子类实例,考虑继承情况
执行子类静态代码块
执行父类构造代码块
执行父类无参构造方法
执行子类构造代码块
执行子类无参构造方法
------------------------------------------------------
执行父类构造代码块
执行父类无参构造方法
执行子类构造代码块
执行子类无参构造方法
------------------------------------------------------
执行父类构造代码块
执行父类无参构造方法
执行子类构造代码块
执行子类有参数构造方法

通过运行结果可以知道,

  • 不存在继承情况:首先执行【静态代码块】,并且【静态代码块】只执行一次,和对象初始化次数无关;其次执行【构造代码块】,每一次初始化对象都会执行一次;最后执行【构造方法】,根据是使用的构造方法来执行。
  • 存在继承情况:1、执行【父类静态代码块】,并且【父类静态代码块】只执行一次,和对象初始化次数无关;2、执行【子类静态代码块】,并且【子类静态代码块】之执行一次,和对象初始化次数无关;3、执行【父类构造代码块】,每一次初始化对象都会执行一次;4、执行【父类无参构造方法】,每一次初始化对象都会执行一次;5、执行【子类构造代码块】,每一次初始化对象都会执行一次;6、执行【子类构造方法】,根据使用的构造方法来执行。

构造代码块、静态代码块、无参构造函数和有参构造函数的执行顺序相关推荐

  1. 无参构造函数和有参构造函数在创建对象时初始化的使用

    类的构造函数是类的一种特殊的成员函数,它会在每次创建类的新对象时执行. 构造函数的名称与类的名称是完全相同的,并且不会返回任何类型,也不会返回 void.构造函数可用于为某些成员变量设置初始值. 默认 ...

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

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

  3. 静态代码块、非静态代码块、构造函数三者执行顺序

    主要探讨一下关于静态代码块,非静态代码块,构造函数的执行顺序. 如有错误,欢迎指出. 首先: 静态成员变量和静态代码块的优先级是一样的,先定义的先执行. 在创建一个对象的时候会执行非静态代码块和构造函 ...

  4. 代码块(静态代码块和非静态代码块)(重难点)

    1 基本介绍 代码化块又称为初始化块,属于类中的成员[即是类的一部分],类似于方法,将逻辑语句封装在方法体中,通过{}包围起来. 但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过 ...

  5. java 静态变量加载顺序_java 成员变量 静态变量代码块 静态代码快加载顺序

    序言 基类A 类B继承实现了A类 1在new B一个实例时首先要进行类的装载.(类只有在使用New调用创建的时候才会被java类装载器装入)2,在装载类时,先装载父类A,再装载子类B 3,装载父类A后 ...

  6. 初始化块和构造函数的执行顺序

    问题 在Java中,如果初始化块在构造函数之后出现,是会先执行构造函数还是初始化块? 结论 先直接给结论:初始化块无论在哪里出现,都会先于构造函数执行,初始化块的执行顺序就是在代码中的先后顺序 测试代 ...

  7. java 代码块(静态代码块、局部代码块、构造代码块)

    public class Test3 {private String name;static {System.out.println("static 实例代码块执行...");}/ ...

  8. 静态块、自由块及构造函数的执行顺序

    静态块和静态变量在类的加载时被执行:加载子类时,会预先加载父类,因此父类中如果有静态块,则最先执行之,然后立即执行子类的静态块: 如果一个类中有多个静态块,则按照编码的先后顺序执行 注:因为一个类只会 ...

  9. java的无参构造函数_Java 无参数构造函数的应用

    创建类时指定了有参数构造函数后,系统默认不会创建无参数构造函数,需要自己手动创建. 创建子类的对象实例时,默认会先调用父类的无参数的构造函数(默认构造函数). 若父类未定义无参数构造函数,则在编译阶段 ...

最新文章

  1. 在Python中以扩展名.txt查找目录中的所有文件
  2. sicily 1034. Forest
  3. JDK8新特性(一)之Lambda表达式
  4. 效仿盖茨:PPstream创始人的心路历程
  5. 再见Windows C++
  6. Java中equals()和“==”区别
  7. python入门24 json模块
  8. BITED数学建模七日谈之一:参加全国大学生数学建模比赛前你需要积累哪些
  9. python datetime处理时间
  10. 慕课python七月_【慕课有约】七月老师:关于小程序的那些事
  11. mysql的update和case when同步使用
  12. 手机浏览器怎么下载视频,第三方手机浏览器下载视频的方法
  13. C++ MFC日志Log类 棒棒的 控制台或文件或一起输出
  14. 计算机能力[置顶] 论计算机专业毕业生的人文素养
  15. 三年时间做到年薪百万,推荐明哥的职场心得
  16. confluence 制作流程图_软件需求分析流程图绘制方法
  17. 解决Win7安装更新补丁提示0x80240037
  18. golang 压测工具vegeta改造-支持自定义压测任务
  19. 这次我不再犹豫,也不再退缩,Python,你就是我要带走的剑,与我相伴浪迹天涯的剑
  20. React Native开发规范(非官方,自己定义的)

热门文章

  1. hp g4笔记本centos安装Ralink 5390 wifi 驱动
  2. flex布局下,盒子被挤压时如何解决
  3. 物理CPU,物理CPU内核,逻辑CPU概念详解
  4. ThinkPHP5提示:未定义数据库类型 InvalidArgumentException
  5. RISCV学习笔记7.9(开源虚拟机篇)--AlmaLinux虚拟机安装python与labview自动化软件
  6. 如何查看mysql连接状态_MySQL如何查看连接数与连接状态
  7. 【算法】PHP实现经典算法(上)
  8. WPF效果第一百八十九篇之又玩Expander+ListBox
  9. GAN 网络训练中,G_loss上升,D_loss下降
  10. centos下unzip命令不可用