`
sonsyboy
  • 浏览: 8316 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
文章分类
社区版块
存档分类
最新评论

Java继承对象初始化顺序

阅读更多

那天Gameloft成都分公司笔试,其中有一道其中有一道题目是关于Java继承机制的初始化顺序,其中涉及到了静态块的调用,实际运行之后记录如下:

public class A {
	static{
		System.out.println("AC");
	}
	A(){
		System.out.println("A");
		fun1();
	}
	void fun1(){
		fun2();
	}
	void fun2(){
		System.out.println("fun2 in A");
	}
}
public class B extends A{
	static{
		System.out.println("BC");
	}
	B(){
		System.out.println("B");
	}
	void fun2(){
		System.out.println("fun2 in B");
	}
}
public class test {
	public static void main(String[] args) {		
		B b=new B();
		b.fun2();
		A a=new A();
	}
}

 运行结果为:

AC
BC
A
fun2 in B
B
fun2 in B
A
fun2 in A

从这个例子可以看出继承机制初始化对象的顺序应该为:

      父类的静态块->子类的静态块->父类的构造函数->子类的构造函数

如果在父类和子类中均添加静态变量、实例变量和实例化快之后的情况会怎么样呢,查阅相关资料并实际测试了一下发现其顺序应该为:

      父类的静态变量->父类的静态块->子类的静态变量->子类的静态块->父类的实例化变量->父类的实例化块->父类的构造函数

        子类的实例化变量->子类的实例化块-> ->子类的构造函数

 

在该例子中还有另外一个就是当子类重写父类的方法之后,其方法的调用,但是这是属于比较简单的内容,就不做说明了!

 

分享到:
评论
1 楼 chaoxiyan1225 2010-11-22  
我觉得静态变量和静态块执行顺序是应该以它们在程序里出现的先后顺序来顺序执行的

相关推荐

    Java类继承初始化顺序

    当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...

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

    为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```java class Base { public Base() { System.out.println("Base constructor"); } } class Derived extends Base { public ...

    “礼让”原则学习Java对象初始化顺序.pdf

    "Java 对象初始化顺序学习指南" 在学习 Java 编程语言时,对象初始化顺序是一个非常重要的知识点,但是许多学生却感到困惑和困难。事实上,Java 对象初始化顺序并不难理解,只需要掌握“礼让”原则和 JVM 的执行...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    java程序初始化顺序

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

    java对象的初始化顺序[参考].pdf

    Java对象的初始化顺序是一个关键的编程概念,它涉及到类加载、静态初始化、实例初始化等多个步骤。下面我们将详细探讨这些步骤。 首先,当程序运行并创建一个新的对象时,JVM(Java虚拟机)会按照特定的顺序来初始...

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

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

    java面试题-类的初始化顺序.doc

    这个顺序表明,无论类之间的继承关系如何,初始化顺序始终是:静态变量和静态初始化块先于非静态成员。在创建对象时,父类的初始化先于子类。这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,...

    java中类的初始化顺序

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

    JAVA类的初始化顺序文.pdf

    子类 --构造器 这个输出揭示了在继承关系中类的初始化顺序: 1. **静态成员和静态初始化块**:首先,会按照父类到子类的顺序初始化静态变量和执行静态初始化块。在上面的例子中,"父类 --静态变量" 和 "子类 --静态...

    Java类继承关系中的初始化顺序实例详解

    Java类继承关系中的初始化顺序实例详解 Java类继承关系中的初始化顺序是Java编程语言中的一個重要概念。该概念关系到类的初始化顺序,静态成员变量的初始化顺序,普通成员变量的初始化顺序等。在本文中,我们将详细...

    JAVA面试题解惑系列——类的初始化顺序

    在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面。正确理解类的初始化顺序对于编写正确、高效的代码至关重要。 首先,需要了解Java类初始化的基本规则,即在类的...

    探究java的ClassLoader及类变量初始化顺序

    总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程技能的重要步骤。通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。

    Java——对象初始化顺序使用详解

    tr); fatherStr = "fatherStr...总之,Java对象初始化顺序是编程过程中必须掌握的基础知识,它涉及到类的加载、实例化过程以及字段和方法的调用顺序。正确理解和运用这些知识,能够使我们写出更加健壮、高效的代码。

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

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

    java 继承关系的加载顺序

    总结,Java中继承关系的加载顺序遵循“先父后子”的原则,从加载到初始化,都是先处理父类,再处理子类。理解这一顺序对于理解和优化代码、避免潜在问题至关重要。同时,Java的类加载机制还支持动态加载和灵活的代码...

    JAVA面试题解惑系列(一)——类的初始化顺序-JAVA程序员JAVA工程师面试必看.pdf,这是一份不错的文件

    JAVA 是一门面向对象的编程语言,类的初始化顺序是 JAVA 程序员和 JAVA 工程师面试中一个非常重要的知识点。本文将详细讲解类的初始化顺序,并提供了相关的测试代码,使读者能够更好地理解和掌握这个知识点。 在 ...

    03.Java对象初始化1

    Java 对象初始化过程详解 Java 对象的初始化过程是通过 new 指令开始的,首先会根据指令参数在常量池中定位到一个类的符号引用。如果没有定位到这个符号引用,那么这个类就没有被加载,就需要 JVM 进行类的加载。...

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

    本文将深入探讨Java中类的初始化顺序,特别是在有继承关系的情况下,各个初始化阶段的执行流程,以及这一顺序的重要性。 首先,让我们明确类初始化的含义。在Java中,类的初始化主要涉及以下三个阶段: 1. 静态...

    类初始化顺序示例讲解

    2. **继承关系中的初始化顺序**:在继承关系中,父类的成员变量与初始化块会在子类的对应部分之前执行。 3. **初始化块与成员变量初始化的顺序**:如果静态成员变量定义与静态初始化块同时存在,则先执行静态成员...

Global site tag (gtag.js) - Google Analytics