当前位置: 首页 > news >正文

java基础之 静态代码块、实例代码块、构造方法执行顺序问题

不含继承关系的执行顺序

静态变量 > 静态代码块 > main()方法 > 构造代码块 > 构造方法

public class Son {private static final String name = "Son AAA";static {System.out.println("static property: AAA" + name);System.out.println("son  static block");}{System.out.println("son construct block");}public Son(String name) {System.out.println("son construct method");}
}

执行结果:

static property: AAASon AAA
son static block
son construct block
son construct method

原因:
静态代码块在类的加载时候执行,由于类只加载一次,所以静态代码块只执行一次;
(静态代码块里面可能会使用静态变量、因此静态变量先于静态代码块的加载)
加载完成后执行main方法;
创建对象时才会执行构造代码块、构造方法(需要被调用,不创建对象不会执行)。
注意:构造代码块在对象一建立就运行,优于构造函数执行。
构造代码块是给所有对象进行统一初始化,而构造函数是给对应的对象(某个)初始化。
为什么构造代码块优于构造函数执行 ?
首先要理解构造代码块的作用,是给所有对象进行统一初始化,提高代码的复用率。
比如有一个Student对象,学生统一年龄是10岁,但是这个班有个插班生,年龄是11岁。这时,可以在构造代码块中默认给年龄是10,在创建“插班生”对象时候单独赋值即可。

含有继承关系的加载顺序

父类静态变量 > 父类静态代码块 > 子类静态变量 > 子类静态代码块 > 父类构造代码块 > 父类构造方法 > 子类构造代码块 > 子类构造方法。

public class Parent {private static final String name = "PARENT name";static {System.out.println("parent name " + name);System.out.println("parent static block");}{System.out.println("parent construct block");}public Parent(String name) {System.out.println("parent construct method");}}
public class Son extends Parent {private static final String name = "Son AAA";static {System.out.println("static property: AAA" + name);System.out.println("son  static block");}{System.out.println("son construct block");}public Son(String name) {super(name);System.out.println("son construct method");}
}

parent name PARENT name
parent static block
static property: AAASon AAA
son static block
parent construct block
parent construct method
son construct block
son construct method

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • udp可靠传输中ACK与NACK的选择
  • 用 CSS 实现太阳系运行效果
  • REGTR: End-to-end Point Cloud Correspondences with Transformers 论文解读
  • 解题-写一个程序判断当前机器的大小端存储模式 #两种方法
  • uniapp + Vue3自定义封装弹窗组件
  • Linux 数据结构 顺序表 链表
  • SpringBoot SSM vue在线作业考试系统
  • RISC-V单片机智能落地扇方案
  • 华为云征文|部署个人博客管理系统 Ghost
  • Golang 字面量的表示
  • 【Docker】容器挂载文件修改后 Commit 新镜像,挂载文件不会更新
  • 用Python实现时间序列模型实战——Day 6: ARIMA 模型的理论基础
  • R 语言学习教程,从入门到精通,R 绘图饼图(23)
  • Flink 1.14.* Flink窗口创建和窗口计算源码
  • 链动2+1与消费增值模式的协同效应
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【MySQL经典案例分析】 Waiting for table metadata lock
  • Android交互
  • java取消线程实例
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Spring声明式事务管理之一:五大属性分析
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 高度不固定时垂直居中
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 前端工程化(Gulp、Webpack)-webpack
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何在 Tornado 中实现 Middleware
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 如何用纯 CSS 创作一个菱形 loader 动画
  • ​flutter 代码混淆
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • (1)Jupyter Notebook 下载及安装
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据
  • (分布式缓存)Redis哨兵
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm高校升本考试管理系统 毕业设计 201631
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (十八)Flink CEP 详解
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • .net core IResultFilter 的 OnResultExecuted和OnResultExecuting的区别
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net core开源商城系统源码,支持可视化布局小程序
  • .net Stream篇(六)
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET6 开发一个检查某些状态持续多长时间的类
  • @Async 异步注解使用
  • @Builder用法
  • @ConditionalOnProperty注解使用说明
  • [1]-基于图搜索的路径规划基础