class A {
static {
System.out.println("static output of A");
}
{
System.out.println("not static output of A");
}
public A(){
System.out.println("constructor output of A");
}
}
class B extends A {
static {
System.out.println("static output of B");
}
{
System.out.println("not static output of B");
}
public B(){
System.out.println("constructor output of B");
}
}
class C {
static {
System.out.println("static output of C");
}
{
System.out.println("not static output of C");
}
public C(){
System.out.println("constructor output of C");
}
public static void main(String[] args){
B b = new B();
System.out.println("------------------------");
B b2 = new B();
}
}
输出为:
static output of C
static output of A
static output of B
not static output of A
constructor output of A
not static output of B
constructor output of B
------------------------
not static output of A
constructor output of A
not static output of B
constructor output of B
详细解释可见以下文章:
http://d-y-zh.iteye.com/blog/607027
http://blog.csdn.net/superbeck/archive/2009/02/22/3920693.aspx
分享到:
相关推荐
在探讨继承中子类与父类构造函数及静态块的执行顺序时,我们首先需要理解构造函数和静态块的基本概念及其在Java中的作用。构造函数主要用于初始化对象的状态,而静态块则是在类加载到内存中时执行的一段代码,通常...
在Java编程语言中,了解静态代码块和构造方法的执行顺序是至关重要的,尤其是在处理类的初始化和对象的创建时。下面将详细解释这些概念及其执行逻辑。 首先,静态代码块(也称为静态初始化器)是由`static`关键字...
在深入探讨Java类的完整构造执行顺序之前,我们先来明确一下Java中构造函数与类初始化的基本概念。构造函数在创建对象时被调用,用于初始化该对象的状态。而类初始化则是指在类首次被使用时,JVM执行的一系列初始化...
Java中静态初始化块的执行顺序 Java是一种面向对象的编程语言,静态初始化块是Java中的一个重要概念。静态初始化块是Java类中的一种特殊的初始化块,它用于初始化类的静态变量和静态方法。在Java中,静态初始化块的...
3. **构造函数重载**:一个类可以有多个构造函数,只要它们的参数列表不同(参数个数、类型或顺序),这就是构造函数的重载。这样可以根据需要提供多种初始化方式。 4. **构造函数的调用**:当使用`new`关键字创建...
它的执行顺序早于类的非静态初始化块和构造函数。当类第一次被加载时,静态块按照它们在代码中的顺序依次执行。 下面是一个简单的静态块示例,展示了如何使用静态块初始化静态变量: ```java public class ...
下面是一些关于Java静态初始化块的关键知识点: 1. **执行顺序**:静态初始化块在非静态初始化块之前执行。当类第一次被加载时,JVM会按照它们在源代码中的顺序执行静态初始化块。 2. **类加载机制**:Java类的...
- 实例初始化块在创建对象时执行,但它们是在构造函数之前执行的。因此,父类的实例初始化块会在子类的实例初始化块之前执行。 6. **访问控制和可见性**: - 子类可以访问父类的公有和受保护成员,但不能直接访问...
在多类继承的场景下,静态块和初始化块的执行顺序有所不同。静态块按照类的加载顺序执行,先父类后子类;而实例初始化块则在创建对象时按遇到的顺序执行,先父类后子类。在第二个示例中,输出顺序为`Father static!`...
本文详细介绍了类继承中的初始化顺序问题,包括初始化的基本概念、初始化过程中的关键步骤以及如何正确处理基类和子类之间的构造函数调用。理解这些概念对于编写高效、可维护的面向对象程序至关重要。希望通过对这些...
总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...
下面我们将详细探讨Java中代码块的执行顺序,包括静态属性、非静态属性、静态代码块、非静态代码块以及构造函数。 首先,让我们回顾一下结论: 1. 当创建一个类的实例时,首先会执行类中的静态属性和静态代码块,...
2. **执行顺序**:构造代码块在构造函数调用之前执行,但在静态代码块之后执行。如果一个类中有多个构造代码块,它们按照出现的顺序依次执行。 3. **适用场景**:构造代码块通常用于初始化对象的某些特定属性或执行...
从提供的【部分内容】中,我们可以提炼出Java语言中面向对象编程的几个核心概念,包括类的继承、构造函数的执行顺序、静态属性的初始化顺序、以及变量的作用域等方面的知识点。以下是详细解释: 1. 类的继承与构造...
* 执行启动类的main函数 -> 创建对象的继承树从高到底的类层次中的静态块(如果已经被执行过,则不会重复执行) -> * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * ...
2. **继承关系中的构造函数执行顺序**:在创建子类对象时,会先执行父类的构造函数,然后再执行子类自己的构造函数。如果父类构造函数中有初始化其他类对象的操作,则会先执行这些对象的构造函数。 3. **构造函数与...
总结来说,Java中的自由块执行顺序是静态自由块在类加载时执行,非静态自由块在创建对象时执行,并且遵循继承的层次结构。理解这一执行顺序有助于优化代码,避免在类加载和对象创建过程中出现预期之外的行为。
例如,在上面的代码中,我们可以看到,静态成员变量sam的初始化是在静态代码块执行之前的,而普通成员变量sam1和sam2的初始化是在构造函数执行之后的。 继承关系中的初始化顺序是指在继承关系的情况下类的初始化...
接下来,JVM继续加载`SuperClass`和`SubClass`,并按顺序执行它们的静态成员和静态初始化块。 3. **实例初始化**:当类加载完成后,JVM开始实例化对象。这个过程始于直接继承自`Object`的最底层类,也就是`Base`类...