`

Java的块,静态块,构造函数,继承的执行先后顺序

阅读更多

代码段如下所示:

public class Demo {
	public static void main(String[] agrs) {
		Son son = new Son();
	}
}

class Super {
	public Super() {
		System.out.print("A\t");
	}

	{
		System.out.print("B\t");
	}
	
	static {
		System.out.print("C\t");
	}
}

class Son extends Super {
	public Son() {
		System.out.print("D\t");
	}

	{
		System.out.print("E\t");
	}
	
	static {
		System.out.print("F\t");
	}
}

 

静态的东西是属于类的,非静态的东西是属于实例的。
静态块是在类被调用到内存后开始执行的,它和创建对象或main方法都没有关系。

静态块一般用于初始化类中的静态成员,而非晶态块一般用于初始化类中的非静态成员。
在上述代码段中,还要考虑继承的问题。

首先是父类静态 --> C
然后是子类静态 --> F

非静态块是在创建对象时自动执行的代码,它可以看作是构造函数中执行完父类构造函数后的第一部分。(构造函数第一行有一个默认的super()调用,就是调用父类构造函数)。

这个时候执行父类构造函数:
父类非静态区块 --> B
父类构造函数块 --> A

然后是子类构造函数:
子类非静态区块 --> E
子类构造函数块 --> D

总结一下就是:
C F B A E D

值得注意的是,静态的东西只会执行一次,就是在类加载的时候。


如果我们在上例中修改main函数为:

 

public static void main(String[] agrs) {
    Son son = new Son();
    Son son2 = new Son();
}

 

执行结果是:

C F B A E D B A E D

分享到:
评论

相关推荐

    构造函数与静态块的执行顺序

    在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...

    java中静态代码块与构造方法的执行顺序判断

    在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...

    Java类的完整构造执行顺序

    在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...

    简单了解java中静态初始化块的执行顺序

    Java中静态初始化块的执行顺序 Java是一种面向对象的编程语言,静态初始化块是Java中的一个重要概念。静态初始化块是Java类中的一种特殊的初始化块,它用于初始化类的静态变量和静态方法。在Java中,静态初始化块的...

    14_构造函数 视频

    3. **构造函数重载**:一个类可以有多个构造函数,只要它们的参数列表不同(参数个数、类型或顺序),这就是构造函数的重载。这样可以根据需要提供多种初始化方式。 4. **构造函数的调用**:当使用`new`关键字创建...

    JAVA程序:静态块代码

    它的执行顺序早于类的非静态初始化块和构造函数。当类第一次被加载时,静态块按照它们在代码中的顺序依次执行。 下面是一个简单的静态块示例,展示了如何使用静态块初始化静态变量: ```java public class ...

    Java static静态初始快

    下面是一些关于Java静态初始化块的关键知识点: 1. **执行顺序**:静态初始化块在非静态初始化块之前执行。当类第一次被加载时,JVM会按照它们在源代码中的顺序执行静态初始化块。 2. **类加载机制**:Java类的...

    再次详细说明在继承中的程序执行顺序,子类与父类到底哪个先执行

    - 实例初始化块在创建对象时执行,但它们是在构造函数之前执行的。因此,父类的实例初始化块会在子类的实例初始化块之前执行。 6. **访问控制和可见性**: - 子类可以访问父类的公有和受保护成员,但不能直接访问...

    Java中的静态块初始化块及main方法.doc

    在多类继承的场景下,静态块和初始化块的执行顺序有所不同。静态块按照类的加载顺序执行,先父类后子类;而实例初始化块则在创建对象时按遇到的顺序执行,先父类后子类。在第二个示例中,输出顺序为`Father static!`...

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

    本文详细介绍了类继承中的初始化顺序问题,包括初始化的基本概念、初始化过程中的关键步骤以及如何正确处理基类和子类之间的构造函数调用。理解这些概念对于编写高效、可维护的面向对象程序至关重要。希望通过对这些...

    java代码的初始化顺序demo

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

    举例说明Java中代码块的执行顺序

    下面我们将详细探讨Java中代码块的执行顺序,包括静态属性、非静态属性、静态代码块、非静态代码块以及构造函数。 首先,让我们回顾一下结论: 1. 当创建一个类的实例时,首先会执行类中的静态属性和静态代码块,...

    静态代码块

    2. **执行顺序**:构造代码块在构造函数调用之前执行,但在静态代码块之后执行。如果一个类中有多个构造代码块,它们按照出现的顺序依次执行。 3. **适用场景**:构造代码块通常用于初始化对象的某些特定属性或执行...

    【Java】80例及结果

    从提供的【部分内容】中,我们可以提炼出Java语言中面向对象编程的几个核心概念,包括类的继承、构造函数的执行顺序、静态属性的初始化顺序、以及变量的作用域等方面的知识点。以下是详细解释: 1. 类的继承与构造...

    java 基础 类对象创建实例化过程 实例解析

    * 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...

    继承与static精选例题

    2. **继承关系中的构造函数执行顺序**:在创建子类对象时,会先执行父类的构造函数,然后再执行子类自己的构造函数。如果父类构造函数中有初始化其他类对象的操作,则会先执行这些对象的构造函数。 3. **构造函数与...

    在Java中自由块的执行顺序

    总结来说,Java中的自由块执行顺序是静态自由块在类加载时执行,非静态自由块在创建对象时执行,并且遵循继承的层次结构。理解这一执行顺序有助于优化代码,避免在类加载和对象创建过程中出现预期之外的行为。

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

    例如,在上面的代码中,我们可以看到,静态成员变量sam的初始化是在静态代码块执行之前的,而普通成员变量sam1和sam2的初始化是在构造函数执行之后的。 继承关系中的初始化顺序是指在继承关系的情况下类的初始化...

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

    接下来,JVM继续加载`SuperClass`和`SubClass`,并按顺序执行它们的静态成员和静态初始化块。 3. **实例初始化**:当类加载完成后,JVM开始实例化对象。这个过程始于直接继承自`Object`的最底层类,也就是`Base`类...

Global site tag (gtag.js) - Google Analytics