热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java中初始代码块、实例变量与构造器的初始化顺序详解

在Java中,当创建一个对象时,首先会为该对象的所有实例变量分配内存(前提是类已经加载),随后执行实例变量的初始化。接着,系统会按顺序执行静态初始化块、非静态初始化块以及构造器中的代码,确保对象的完整初始化。这一过程保证了对象的状态在创建时是正确且一致的。

♦ 当java创建一个对象时,先为该对象的所以实例变量分配栈内存(已加载类的前提),然后执行实例变量的初始化,其初始化顺序是,先执行初始化块 或 声明实例变量时的初始值(具体执行顺序根据源码实际的排序顺序而定),然后再执行构造器声明的初始值。

1 public class InitTest {
2 int a=3;
3 {
4 a=1;
5 }
6 InitTest(){
7 a=2;
8 }
9 public static void main(String[] args) {
10 InitTest it = new InitTest();
11 //输出2,因为构造器再次指定初始值
12 System.out.println(it.a);
13 }
14 }

 

1 public class InitTest {
2 //代码1
3 {
4 a=1;
5 }
6 //代码2
7 int a=3;
8
9 public static void main(String[] args) {
10 InitTest it = new InitTest();
11 //输出3,因为实例变量再次指定初始值。若代码1和代码2对调位置,则输出1
12 System.out.println(it.a);
13 }
14 }

 

♦ 静态初始化块类似,jvm第一次主动使用某个类时,会在类准备阶段为该类的静态成员变量分配内存,在初始化阶段初始化这些成员变量,初始化执行的顺序和源码的排序相同。

1 public class InitTest {
2 //1
3 static{
4 a=1;
5 }
6 //2
7 public static int a=3;
8
9 public static void main(String[] args) {
10 //输出3,因为实例变量再次指定初始值。若1和2对调位置,则输出1
11 System.out.println(InitTest.a);
12 }
13 }

--内容参考《疯狂java》

转:https://www.cnblogs.com/xiuzhu/p/8711612.html



推荐阅读
  • 数组元素逆序排列的实现
    本文介绍了一种简单有效的方法,用于将整数数组中的元素进行逆序排列。通过折半交换对应位置的元素,可以高效地完成这一任务。 ... [详细]
  • 本文详细介绍如何在VSCode中配置自定义代码片段,使其具备与IDEA相似的代码生成快捷键功能。通过具体的Java和HTML代码片段示例,展示配置步骤及效果。 ... [详细]
  • 本文总结了Java程序设计第一周的学习内容,涵盖语言基础、编译解释过程及基本数据类型等核心知识点。 ... [详细]
  • Java编程实践:深入理解方法重载
    本文介绍了Java中方法重载的概念及其应用。通过多个示例,详细讲解了如何在同一类中定义具有相同名称但不同参数列表的方法,以实现更灵活的功能调用。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 实体映射最强工具类:MapStruct真香 ... [详细]
  • 本文探讨了在Java中实现系统托盘最小化的两种方法:使用SWT库和JDK6自带的功能。通过这两种方式,开发者可以创建跨平台的应用程序,使窗口能够最小化到系统托盘,并提供丰富的交互功能。 ... [详细]
  • 本文探讨了在Java多线程环境下,如何确保具有相同key值的线程能够互斥执行并按顺序输出结果。通过优化代码结构和使用线程安全的数据结构,我们解决了线程同步问题,并实现了预期的并发行为。 ... [详细]
  • Java第四周作业:条件语句实践与分析
    本次作业主要围绕Java编程中的if语句展开,通过具体案例深入理解选择结构的使用方法。学生需要完成多个编程任务,并在博客中详细记录每道题目的题目、代码及运行结果。 ... [详细]
  • 本次考试于2016年10月25日上午7:50至11:15举行,主要涉及数学专题,特别是斐波那契数列的性质及其在编程中的应用。本文将详细解析考试中的题目,并提供解题思路和代码实现。 ... [详细]
  • 本文详细探讨了JDBC(Java数据库连接)的内部机制,重点分析其作为服务提供者接口(SPI)框架的应用。通过类图和代码示例,展示了JDBC如何注册驱动程序、建立数据库连接以及执行SQL查询的过程。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
  • dotnet 通过 Elmish.WPF 使用 F# 编写 WPF 应用
    本文来安利大家一个有趣而且强大的库,通过F#和C#混合编程编写WPF应用,可以在WPF中使用到F#强大的数据处理能力在GitHub上完全开源Elmis ... [详细]
  • 信用评分卡的Python实现与评估
    本文介绍如何使用Python构建和评估信用评分卡模型,涵盖数据预处理、模型训练及验证指标选择。附带详细代码示例和视频教程链接。 ... [详细]
  • 深入理解Shell脚本编程
    本文详细介绍了Shell脚本编程的基础概念、语法结构及其在操作系统中的应用。通过具体的示例代码,帮助读者掌握如何编写和执行Shell脚本。 ... [详细]
author-avatar
拥有勒幷不代表幸福_563
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有