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

Java父类、子类实例初始化顺序详解

1、完整的初始化顺序(含继承)

1、父类的静态初始化

父类静态变量默认值 → 父类静态变量显式赋值 + 父类静态代码块(按代码顺序执行)。

2、子类的静态初始化

子类静态变量默认值 → 子类静态变量显式赋值 + 子类静态代码块(按代码顺序执行)。

3、父类的实例初始化

父类实例变量默认值 → 父类实例变量显式赋值 + 父类实例代码块(按代码顺序执行)→ 父类构造函数。

4、子类的实例初始化

子类实例变量默认值 → 子类实例变量显式赋值 + 子类实例代码块(按代码顺序执行)→ 子类构造函数。

2、代码示例

class Parent {// 父类静态变量private static String parentStaticField = initParentStaticField();// 父类静态代码块static {System.out.println("父类静态代码块执行");}// 父类实例变量private String parentInstanceField = initParentInstanceField();// 父类实例代码块{System.out.println("父类实例代码块执行");}// 父类构造函数public Parent() {System.out.println("父类构造函数执行");}// 父类初始化方法private static String initParentStaticField() {System.out.println("父类静态变量赋值");return "parentStatic";}private String initParentInstanceField() {System.out.println("父类实例变量赋值");return "parentInstance";}
}public class Test extends Parent {// 子类静态变量private static String staticField = initStaticField();// 子类静态代码块static {System.out.println("子类静态代码块执行");}// 子类实例变量private String instanceField = initInstanceField();// 子类实例代码块{System.out.println("子类实例代码块执行");}// 子类构造函数public Test() {System.out.println("子类构造函数执行");}// 子类初始化方法private static String initStaticField() {System.out.println("子类静态变量赋值");return "static";}private String initInstanceField() {System.out.println("子类实例变量赋值");return "instance";}public static void main(String[] args) {new Test();}
}

执行结果:

父类静态变量赋值       // 父类静态初始化开始
父类静态代码块执行     // 父类静态初始化完成
子类静态变量赋值       // 子类静态初始化开始
子类静态代码块执行     // 子类静态初始化完成
父类实例变量赋值       // 父类实例初始化开始
父类实例代码块执行     
父类构造函数执行       // 父类实例初始化完成
子类实例变量赋值       // 子类实例初始化开始
子类实例代码块执行     
子类构造函数执行       // 子类实例初始化完成

分析:
可知通过继承时候,当加载子类时候会优先加载父类,等父类全部加载完毕才会进行子类的加载,静态变量特殊,如果

http://www.xdnf.cn/news/3390.html

相关文章:

  • 92.一个简单的输入与显示示例 Maui例子 C#例子
  • 论文速读 - 通过提示工程创建全面的合成数据集以支持医疗领域模型训练
  • 【Scrapy】简单项目实战--爬取dangdang图书信息
  • 柯希霍夫积分法偏移成像中数据分布不均匀的处理方法
  • Windows和 macOS 上安装 `nvm` 和 Node.js 16.16.0 的详细教程。
  • 深度解析| 信创浪潮下,传统AD域如何破局?
  • HCIP-security常见名词
  • 软考中级-软件设计师 操作系统(手写笔记)
  • pinia-plugin-persistedstate的使用
  • win11 终端 安装ffmpeg 使用终端Scoop
  • Copilot 上线深度推理智能体 Researcher
  • Android pm命令参考
  • Windows系统下MinerU的CUDA加速配置指南
  • 6.1/Q1,浙江医院用NHANES:膳食中摄入黄酮类化合物有助于延缓生物衰老过程
  • 毫米波通信的技术挑战与解决方案
  • Nginx核心功能02
  • 对js的Date二次封装,继承了原Date的所有方法,增加了自己扩展的方法,可以实现任意时间往前往后推算多少小时、多少天、多少周、多少月;
  • django_rq
  • Unity编辑器扩展之导出项目中所有Script里面的文本内容
  • 《Python实战进阶》No45:性能分析工具 cProfile 与 line_profiler
  • 【SLAM】svo 的深度滤波和 msckf 的后端的点的优化的差异是什么?delayinit和depthfilter之间的差异是什么?
  • 多帧Dicom文件获取ImagePosition、Intercept、Slope、PixelSpacing
  • AndroidStudio生成AAR
  • 网页工具箱 --- 一个强大的浏览器脚本工具
  • 前端开发 Markdown 编辑器与富文本编辑器详解
  • 长尾关键词SEO优化策略精解
  • Vcpkg C++库管理工具安装
  • Azure AI Foundry实战:从零开始构建智能应用
  • 关于 live555延迟优化之缓存区优化“StreamParser::afterGettingBytes() warning: read”” 的解决方法
  • 晶振:从消费电子到航天领域的时间精度定义者