`
REGAL2T
  • 浏览: 3576 次
  • 性别: Icon_minigender_1
  • 来自: 火星
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

[转]详细分析一下对象的初始化顺序

 
阅读更多
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对象初始化顺序.pdf

    三、Java 对象初始化顺序的实例分析 以下是一个示例代码,用于演示 Java 对象初始化顺序的问题: ```java class Guest { public Guest() { System.out.println("Guest"); } } class Dad extends Guest { ...

    Java静态初始化块和对象初始化块

    静态初始化块和对象初始化块的执行顺序不同。静态初始化块在类加载时执行,而对象初始化块在创建新对象时执行。它们可以相互配合,以实现更复杂的初始化逻辑。例如,静态初始化块可以用来设置全局配置,而对象初始化...

    java代码的初始化顺序demo

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

    java中类的初始化顺序

    ### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...

    类初始化顺序示例讲解

    ### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...

    C++全局变量初始化的一点总结

    初始化顺序方面,同一编译单元内的全局变量按照声明顺序进行初始化,但不同编译单元间的全局变量的初始化顺序是不确定的,这可能导致潜在的问题。如果全局变量之间存在依赖关系,最佳实践是重构代码以消除这种依赖。...

    通过java字节码分析学习对象初始化顺序

    在Java编程语言中,对象初始化顺序是一个重要的概念,它涉及到类和对象的生命周期。通过字节码分析,我们可以深入理解这个过程。字节码是Java虚拟机(JVM)理解和执行的二进制代码,它是Java源代码经过编译后的产物...

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

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

    java类中静态域、块,非静态域、块,构造函数的初始化顺序

    ### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...

    c#对象初始化顺序实例分析

    了解这些初始化顺序对编写健壮的C#代码至关重要,因为它可以帮助你避免因误解初始化顺序而导致的错误。在设计类结构时,应考虑这些规则,确保每个类的构造函数能够正确地初始化其成员,同时尊重继承层次的构造顺序。

    类和对象的初始化过程.zip

    这个压缩包文件包含三个源代码文件:StaticTest.java、Test.java和Father.java,它们可能用于演示类和对象初始化的不同方面。让我们逐一探讨这些概念。 1. **类的初始化** 类的初始化通常在以下几种情况下发生: ...

    Java类初始化顺序

    以给出的例子`TestClass`为例,我们分析一下初始化顺序: - 首先,类加载时,执行静态初始化块,给`b`赋值为"正常执行",并尝试访问`d`(此时`d`未初始化,会导致`NullPointerException`)。 - 然后,创建`Test...

    java代码初始化流程研究

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

    STL_map初始化和排序

    通过分析这个项目,你可以看到如何在实际编程环境中初始化`map`,以及它是如何自动完成排序的。阅读源代码并运行程序,可以帮助你更好地理解`STL map`的工作原理和使用方法。 总之,`STL map`在C++编程中扮演着重要...

    jquery初始化分析

    ### jQuery初始化分析与JavaScript Ready机制详解 在深入探讨jQuery初始化过程之前,我们首先需要理解jQuery是什么以及它在前端开发中的重要性。jQuery是一款快速、简洁的JavaScript库,它极大地简化了HTML文档遍历...

    学习java静态数据初始化.doc

    - 合理安排静态成员和非静态成员的初始化顺序,确保程序逻辑的正确性。 通过本篇文章的学习,我们了解了Java中静态初始化的基本概念、执行过程以及如何正确地在程序中使用静态初始化。这对于理解和优化Java应用...

    深入java虚拟机加载初始化

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

    第六章结构化分析和第七章面向对象分析.pdf

    面向对象分析的过程中,注重寻找对象、确定对象的属性和方法、组织类的设计,并通过动态模型和交互次序的图形化表示(如顺序图和状态图)来进一步理解系统。 面向对象分析的过程中,会使用到用例图和用例模板来描述...

Global site tag (gtag.js) - Google Analytics