`
zengshaotao
  • 浏览: 796801 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

java初始化顺序解析

    博客分类:
  • java
 
阅读更多
在只有原子层级关系的java代码里,对于静态变量、静态初始化块、变量、初始化块、构造器,他们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>(构造器),对于以上结论,可以通过如下代码来验证:

package initorder;

public class InitOrder {

  public static String staticField = "静态变量---属于类";
  public String field = "变量";
 
  //静态初始化块
  static {
  
   System.out.println(staticField);
   System.out.println("静态初始化块");
  }
  //初始化块
  {
   System.out.println(field);
   System.out.println("初始化块");
  }
  //构造器
  public InitOrder(){
   System.out.println("构造器");
  }
 
  public static void main(String[] args)
  {
   new InitOrder();
  }
}
运行后控制台上出现的代码:

静态变量---属于类
静态初始化块
变量
初始化块
构造器



对于这样的初始化顺序,我们可以这样理解:对于静态域,它是属于类的,而对于一个对象,它的数据类型是类,我们都知道,只有先有数据类型,才有数据类型声明的对象,所以静态域的初始化肯定是先于构造器的(构造器只是初始化对象)。这一逻辑关系搞清之后再来解析变量域与构造器的初始化顺序。对于变量域,首先是专属于对象的,初始化顺序显然是后于静态域的。而当初始化对象的时,必然是先初始化对象的成员(因为整个对象要想初始化,其结构必须先初始化),变量域的初始化顺序先于构造器也就很容易理解了,所以也就有了上述的初始化顺序。

这只是初始化对象的一个方面,也很简单。那么接下来的问题也自然而然的出来了:

对于原子层级关系,静态域(静态变量和静态初始化块)的各个部分顺序又是怎样?对于具有层级关系的上述域的父子类的初始化顺序又是怎么样?
分享到:
评论

相关推荐

    java程序初始化顺序

    以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...

    java代码的初始化顺序demo

    这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...

    类继承的初始化顺序类,继承的初始化顺序

    本篇文章将围绕“类继承的初始化顺序”这一主题展开,详细解析初始化过程中涉及的关键概念和技术细节。 ### 类继承的初始化顺序概述 在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会...

    Java初始化块Java初始化块.doc

    总结起来,Java初始化块是Java中用于对象和类初始化的重要工具,它们在不同场景下提供了一种灵活的方式来控制对象和类的状态。理解初始化块的工作原理对于编写高效且无错误的Java代码至关重要。在编写代码时,应谨慎...

    类初始化顺序示例讲解

    ### 初始化顺序解析 #### 静态成员变量与静态初始化块 1. **父类静态成员变量的默认初始化**:首先初始化的是 `BaseClass` 中的静态成员变量 `basename` 的默认值(即 `null`)。这是整个初始化过程的第一步。 2...

    JAVA面试题解惑系列类的初始化顺序JAVA程序员JAVA工程师面试必看.pdf

    Java语言中的类初始化顺序是面试中常见的问题,尤其对于Java程序员和工程师来说,理解这一概念至关重要。本篇文章将深入解析类初始化的顺序以及在继承情况下的表现。 首先,我们需要明确类初始化顺序的基本规则: ...

    成员的初始化顺序和多态性

    在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证这些概念。 #### 实验步骤解析 ##### 步骤一...

    深入Java初始化.pdf

    初始化顺序: 1. 首先,JVM会加载类,并解析类的字节码,这个过程中会执行静态初始化,即`<clinit>`方法。 2. 如果类中有静态变量或静态初始化块,它们会按照在源代码中出现的顺序依次执行。 3. 当创建对象时,JVM会...

    Java中对象初始化顺序的详细介绍

    这种情况下,初始化顺序如下:首先,`Lower`类的实例创建并分配默认值,然后调用`Upper`的构造器,接着执行`Initializer.initialize()`,该方法根据对象的实际类型(`Lower`)来设置字段的值。 5. **默认值**:即使...

    Java中static静态变量的初始化完全解析

    总的来说,理解Java中静态变量的初始化顺序对于编写可靠的代码非常重要。开发者应避免依赖这种顺序来初始化变量,因为这可能导致难以预料的行为。在编写代码时,推荐的做法是保持静态变量的初始化尽可能简单,避免...

    Java初始化块及执行过程解析

    "Java初始化块及执行过程解析" Java 初始化块是 Java 语言中的一种特殊语法结构,用于对 Java 对象进行初始化操作。初始化块可以分为两种:静态初始化块和普通初始化块。静态初始化块用于对类进行初始化,而普通...

    java代码初始化流程研究

    静态变量的初始化顺序按照它们在源代码中的出现顺序进行,而静态块则是在类加载时按顺序执行的。例如,在`JvmTest.java`和`JvmTest1.java`中,如果有静态变量和静态初始化块,它们的执行顺序将体现在`<clinit>`方法...

    图文详解Java中class的初始化顺序

    总结,Java中类的初始化顺序遵循以下规则: 1. 先加载父类,再加载子类。 2. 加载完成后,先初始化静态部分(静态初始化块和静态变量),再初始化实例部分(实例初始化块和构造函数)。 3. 静态部分按照源代码中的...

    java对象初始化顺序验证示例

    Java对象初始化顺序是一个重要的编程概念,它涉及到类的继承、构造函数、成员变量初始化和非静态初始化块。在这个示例中,我们通过一个简单的代码片段来验证这些规则。首先,让我们详细解析一下给出的代码: ```...

    Java类加载器:静态变量初始化.docx

    这个过程是通过 Java 语言规范中定义的初始化顺序来完成的。 在 Java 语言规范中,静态变量的初始化顺序是按照以下顺序进行的: 1. 首先,静态变量的声明顺序决定了其初始化顺序。 2. 静态变量的初始化过程中,...

    Java静态和非静态成员变量初始化过程解析

    通过这两个示例,我们可以看到,非静态成员变量的初始化顺序是:成员变量初始化语句>成员变量初始化块>构造函数。 而对于静态成员变量,它们是在类加载时初始化的。例如,我们可以定义一个静态成员变量static ...

    深入java虚拟机加载初始化

    这个结果与我们的直觉相悖,其背后的原因在于JVM的初始化顺序。 当类被加载时,JVM会按照如下顺序执行: 1. **类加载**:将类加载到内存中。 2. **连接**:包括验证、准备和解析阶段。 3. **初始化**:在这个阶段...

    通过Java字节码发现有趣的内幕之初始化篇(下)Java开

    比如,我们可以通过合理地安排初始化顺序,优化代码结构,避免不必要的资源消耗。此外,对于一些复杂的并发场景,理解初始化过程可以帮助我们预防潜在的线程安全问题。 总的来说,Java字节码的深入研究能够使开发者...

    Java类加载初始化的过程及顺序

    Java类加载初始化的过程是Java编程语言中一个重要的概念,它决定了Java类的加载和初始化顺序。在Java中,类的加载是通过类加载器(ClassLoader)来实现的。类加载器会将类的字节码文件(.class)加载到Java虚拟机...

Global site tag (gtag.js) - Google Analytics