(1)变量定义的先后顺序决定初始化顺序,即使变量定义散布在方法定义之间,他们仍旧会在方法被调用之前得到初始化,构造方法也是特殊的方法
(2)执行顺序:静态块, 静态变量,非静态变量,构造方法
每次在创建对象的时候非静态变量都会被初始化
静态对象只会在类加载的时候被初始化一次
public class Initialization { static Table table = new Table(); static Cupboard cupboard = new Cupboard(); @Test public void test() { System.out.println("start..."); new Cupboard(); System.out.println("restart..."); new Cupboard(); table.method(1); cupboard.method(1); } } class Bowl { public Bowl(int maker) { System.out.println("Bowl " + maker); } public void method(int maker){ System.out.println("Bowl method " + maker); } } class Table{ static Bowl bowl1 = new Bowl(1); Table(){ System.out.println("Table "); bowl2.method(2); } public void method(int maker){ System.out.println("Table method " + maker); } static Bowl bowl2 = new Bowl(2); } class Cupboard{ Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); Cupboard(){ System.out.println("Cupboard "); bowl4.method(2); } public void method(int maker){ System.out.println("Cupboard method " + maker); } static Bowl bowl5 = new Bowl(5); }结果:
Bowl 1
Bowl 2
Table
Bowl method 2
Bowl 4
Bowl 5
Bowl 3
Cupboard
Bowl method 2
start...
Bowl 3
Cupboard
Bowl method 2
restart...
Bowl 3
Cupboard
Bowl method 2
Table method 1
Cupboard method 1
相关推荐
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
同时,掌握类变量初始化顺序可以避免因误解而导致的错误,特别是在多线程环境中,对静态变量的并发访问和初始化顺序的控制需要特别注意。 总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程...
在C++中,每个DLL都有自己的全局变量初始化顺序,这取决于编译时的链接过程。当一个DLL被加载时,它的全局变量会按照在DLL内部的定义顺序进行初始化。但是,如果多个DLL都引用了相同的全局变量,或者有一个DLL依赖于...
值得注意的是,同一段内的全局变量初始化顺序是不可预测的,这意味着在同一个段内的 `C1` 和 `C2` 的初始化顺序不能保证。 ##### 1.4 EXE 调用 DLL 当一个EXE文件调用DLL文件时,DLL内的全局变量初始化顺序也需要...
初始化顺序方面,同一编译单元内的全局变量按照声明顺序进行初始化,但不同编译单元间的全局变量的初始化顺序是不确定的,这可能导致潜在的问题。如果全局变量之间存在依赖关系,最佳实践是重构代码以消除这种依赖。...
4. **子类非静态成员初始化**:接着是子类的非静态成员变量初始化。 5. **基类构造函数调用**:通过`super()`调用基类的构造函数。 6. **子类构造函数调用**:最后执行子类自身的构造函数。 ### 初始化过程详解 ##...
Java 变量初始化详解 Java 变量初始化是 Java 语言的基础知识点之一,但也往往被学习者所忽略。 Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 ...
以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...
在编程语言中,特别是在C++和Qt框架下,变量初始化的顺序确实是一个重要的概念,它与成员变量在类中的声明顺序密切相关。这个问题涉及到C++的构造函数和成员初始化列表。 在C++中,当创建一个类的对象时,构造函数...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
这个顺序表明,无论类之间的继承关系如何,初始化顺序始终是:静态变量和静态初始化块先于非静态成员。在创建对象时,父类的初始化先于子类。这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,...
### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...
在 Java 中,实例变量的初始化顺序是按照定义的顺序进行的,而静态变量的初始化顺序则是按照定义的顺序,并且只在第一次访问时初始化。 在上面的示例代码中,我们可以看到,类变量和实例变量的初始化顺序是按照定义...
在本文中,我们讨论了 Java 类加载器中的静态变量初始化机制,了解了静态变量的初始化顺序和类加载器的生命周期。通过对静态变量初始化机制的理解,我们可以更好地掌握 Java 语言的基础知识,并更好地应用 Java 语言...
总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...
总结一下Java变量初始化顺序的要点: 1. **静态变量与静态初始化块**:首先按照在类中定义的顺序初始化所有静态变量和执行静态初始化块。这是在类被加载到内存时发生的,与对象创建无关。 2. **非静态变量与初始化...
详细介绍了Java的静态成员变量、静态数据块、非静态成员变量和非静态成员变量等初始化顺序
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
首先,需要了解Java类初始化的基本规则,即在类的静态变量、静态初始化块、变量、初始化块、构造器这五个部分中,它们的初始化顺序依次是:静态变量、静态初始化块、变量、初始化块、构造器。这个顺序在单个类中是...
成员变量的初始化顺序遵循以下规则: 1. **声明时初始化**:首先执行成员变量的声明时初始化,即在成员变量声明时直接赋值,如`int a = 1;`。 2. **初始化列表初始化**:接着执行构造函数的初始化列表,其中的初始...