package junit.test;
/**
* 对照这个输出,我们来详细分析一下对象的初始化顺序:
* 1,为A类分配内存空间,初始化所有成员变量为默认值,包括primitive类型(int=0,boolean=false,…)和Reference类型。
* 2,调用A类构造函数。
* 3,调用B类构造函数。
* 4,调用Object空构造函数。(java编译器会默认加此构造函数,且object构造函数是个空函数,所以立即返回)
* 5,初始化B类成员变量,因为B类没有成员变量,跳过。
* 6,执行sysout输出子类A的成员变量小a。// 此时为0
* 7,初始化A类成员变量,将A类成员变量小a赋值100。
* 8,执行sysout输出当前A类的成员变量小a。// 此时为100
* 9,赋值当前A类的成员变量小a为200。
* 10,main函数中执行sysout,输出A类实例的成员变量小a。// 此时为200
*
* 5,7那两行描述是重点,结论是成员变量初始化是在父类构造函数调用完后,在此之前,成员变量的值均是默认值。
*
* @author REGAL
*/
public class A extends B {
public int a = 100;
private boolean flag;
public A() {
super();
System.out.println(a); // 100
a = 200;
}
public static void main(String[] args) {
A obj = new A(); // 实例化A
System.out.println(obj.a); // 200
System.out.println(obj.flag);
}
}
class B {
public B() {
System.out.println(((A) this).a); // 0
}
}
分享到:
相关推荐
为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```java class Base { public Base() { System.out.println("Base constructor"); } } class Derived extends Base { public ...
三、Java 对象初始化顺序的实例分析 以下是一个示例代码,用于演示 Java 对象初始化顺序的问题: ```java class Guest { public Guest() { System.out.println("Guest"); } } class Dad extends Guest { ...
静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...
这个"java代码的初始化顺序demo"显然旨在演示这一过程。让我们深入探讨Java中的初始化顺序及其背后的机制。 1. **类加载阶段**: 在Java程序运行时,JVM会先加载类的字节码文件(.class文件)。这个过程包括加载、...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...
初始化顺序方面,同一编译单元内的全局变量按照声明顺序进行初始化,但不同编译单元间的全局变量的初始化顺序是不确定的,这可能导致潜在的问题。如果全局变量之间存在依赖关系,最佳实践是重构代码以消除这种依赖。...
在Java编程语言中,对象初始化顺序是一个重要的概念,它涉及到类和对象的生命周期。通过字节码分析,我们可以深入理解这个过程。字节码是Java虚拟机(JVM)理解和执行的二进制代码,它是Java源代码经过编译后的产物...
### 成员的初始化顺序 #### 实验背景与目标 在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证...
### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...
了解这些初始化顺序对编写健壮的C#代码至关重要,因为它可以帮助你避免因误解初始化顺序而导致的错误。在设计类结构时,应考虑这些规则,确保每个类的构造函数能够正确地初始化其成员,同时尊重继承层次的构造顺序。
这个压缩包文件包含三个源代码文件:StaticTest.java、Test.java和Father.java,它们可能用于演示类和对象初始化的不同方面。让我们逐一探讨这些概念。 1. **类的初始化** 类的初始化通常在以下几种情况下发生: ...
以给出的例子`TestClass`为例,我们分析一下初始化顺序: - 首先,类加载时,执行静态初始化块,给`b`赋值为"正常执行",并尝试访问`d`(此时`d`未初始化,会导致`NullPointerException`)。 - 然后,创建`Test...
静态变量的初始化顺序按照它们在源代码中的出现顺序进行,而静态块则是在类加载时按顺序执行的。例如,在`JvmTest.java`和`JvmTest1.java`中,如果有静态变量和静态初始化块,它们的执行顺序将体现在`<clinit>`方法...
通过分析这个项目,你可以看到如何在实际编程环境中初始化`map`,以及它是如何自动完成排序的。阅读源代码并运行程序,可以帮助你更好地理解`STL map`的工作原理和使用方法。 总之,`STL map`在C++编程中扮演着重要...
### jQuery初始化分析与JavaScript Ready机制详解 在深入探讨jQuery初始化过程之前,我们首先需要理解jQuery是什么以及它在前端开发中的重要性。jQuery是一款快速、简洁的JavaScript库,它极大地简化了HTML文档遍历...
- 合理安排静态成员和非静态成员的初始化顺序,确保程序逻辑的正确性。 通过本篇文章的学习,我们了解了Java中静态初始化的基本概念、执行过程以及如何正确地在程序中使用静态初始化。这对于理解和优化Java应用...
这个结果与我们的直觉相悖,其背后的原因在于JVM的初始化顺序。 当类被加载时,JVM会按照如下顺序执行: 1. **类加载**:将类加载到内存中。 2. **连接**:包括验证、准备和解析阶段。 3. **初始化**:在这个阶段...
面向对象分析的过程中,注重寻找对象、确定对象的属性和方法、组织类的设计,并通过动态模型和交互次序的图形化表示(如顺序图和状态图)来进一步理解系统。 面向对象分析的过程中,会使用到用例图和用例模板来描述...