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

java初始化顺序解析

    博客分类:
  • java
 
阅读更多
package initorder;

public class ParentSub extends Parent{

public static String staticField = "子类静态变量---属于类";
public String field = "子类变量";

//静态初始化块
static {
 
  System.out.println(staticField);
  System.out.println("子类静态初始化块");
}
//初始化块
{
  System.out.println(field);
  System.out.println("子类初始化块");
}
//构造器
public ParentSub(){
  System.out.println("子类构造器");
}

public static void main(String args[])
{
  new ParentSub();
}
}

class Parent {

public static String staticField = "父类静态变量---属于类";
public String field = "父类变量";

//静态初始化块
static {
 
  System.out.println(staticField);
  System.out.println("父类静态初始化块");
}
//初始化块
{
  System.out.println(field);
  System.out.println("父类初始化块");
}
//构造器
public Parent(){
  System.out.println("父类构造器");
}
}
程序输出:

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

这说明了一点,子类的初始化并不完全等到父类完全初始化完毕之后才进行的。至于顺序,通过程序就可以知道了。那么对于静态域的初始化顺序(单只考虑子或父类)又是怎么样,这个也可以通过程序来测试。结论是,顺序初始化。。。。。。。

package initorder;

public class EquLev {

  public static A a =new A();
 
  static{
  
   System.out.println("static block init");
  }
 
  public static B b = new B();
 
  public static void main(String args[])
  {
   new EquLev();
  }
}

class A{
public A(){
  System.out.println("class A test");
}
}

class B{
public B(){
  System.out.println("class B test");
}
}

我们可以随意变更各个成员变量和静态初始化块的内容,然后看他们的输出顺序就知道了
分享到:
评论

相关推荐

    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