`
yangbl928
  • 浏览: 5211 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java静态属性/静态代码块、非静态属性/非静态代码块、构造方法及子父类的执行顺序

阅读更多

 请看下面小demo,这里有两个类SubClass和SupperClass,其中SubClass继承于SupperClass。

 

SupperClass类:

/**
 * 父类
 *
 * @author yangbl
 *
 */
public class SupperClass {

    static String staticVariable = "supper staticVariable initialize";

    static {
        staticVariable = "supper static block execute";
        System.out.println(staticVariable);
    }

    {
        staticVariable = "supper block execute";
        System.out.println(staticVariable);
    }

    public SupperClass() {
        staticVariable = "supper constructor execute";
        System.out.println(staticVariable);
    }

}

 

SubClass类:

/**
 * 子类
 *
 * @author yangbl
 *
 */
public class SubClass extends SupperClass {

    static {
        staticVariable = "subClass static block execute";
        System.out.println(staticVariable);
    }

    {
        staticVariable = "subClass block execute";
        System.out.println(staticVariable);
    }

    public SubClass() {
        staticVariable = "subClass constructor execute";
        System.out.println(staticVariable);
    }

    public static void main(String[] args) {
        SupperClass supperClass = new SubClass();
    }
}

 

运行SubClass类中的main方法得到结果如下:

supper static block execute
subClass static block execute
supper block execute
supper constructor execute
subClass block execute
subClass constructor execute

 

分析结果可以得到如下加载执行顺序结论:

1.加载父类的静态属性和静态代码块。

2.加载子类的静态属性和静态代码块。

3.加载父类的非静态属性和非静态代码块。

4.加载父类的构造方法。

5.加载子类的非静态属性和非静态代码块。

6.加载子类的构造方法。

 

注:

1.静态属性和静态代码块是在类加载的时候就加载执行,执行顺序与代码顺序相同。

2.非静态属性和非静态代码块是在类创建实例的时候执行,优先于构造方法,执行顺序与代码顺序相同。

分享到:
评论

相关推荐

    Java常见笔试、面试题目深度剖析,方法重写详解、静态代码块与构造方法执行顺序问题

    5. 最后,执行当前类的非静态代码块(如果有)。 这个过程确保了对象在被创建之前,其类的静态属性和父类的静态属性已经被正确初始化。同时,通过构造方法链确保了父类的状态在子类状态之前完成初始化。 在实际...

    java 静态块实例块构造器调用

    在Java继承体系中,子类会继承父类的非私有成员,包括静态块、实例块和构造器。调用顺序如下: 1. **静态块的执行顺序**:首先,从父类到子类,按照定义的顺序依次执行静态块。这意味着父类的静态块先于子类的静态...

    java中子类继承父类,程序运行顺序的深入分析

    在示例中,"========方法体======== "(父类的非静态代码块)和"========无名称方法体======== "(子类的非静态代码块)分别在它们对应的构造方法之前执行。 3. **构造方法**:之后,会调用构造方法来创建对象。...

    java, java培训,团队转型技术培训

    在继承中,父类的无参构造方法会在子类构造方法之前执行。 5. **类的执行顺序** - **类加载**:首先执行静态变量和静态代码块的初始化。 - **实例化**:接着执行成员变量的初始化,然后是构造代码块和构造方法。 ...

    Java面试题解惑系列

    - **非静态变量与非静态初始化块**:当类的新实例被创建时,这些部分将按其在类中出现的顺序依次执行。 - **构造器**:用于创建类的实例,通常位于初始化过程的最后一步。 接下来,我们通过具体的例子进一步解释...

    javase子类父类继承关系图解

    2. **父类的非静态初始化块**:接着,如果父类有非静态初始化块(也称为实例初始化块),它会在父类的构造函数执行之前运行。这些块用于初始化父类的实例变量。 3. **父类的默认构造器**:然后,调用父类的默认构造...

    杰普学习corejava总结笔记

    执行静态代码块 3.分配内存空间,同时初始化非静态的属性(赋默认值) 4.调用父类构造器(注意调用父类构造器之前已经给父类的非静态的属性显示赋值,如果有显示赋值的话) 5.父类构造器执行完后,如果自己声明属性的...

    Java初始化块Java初始化块.doc

    Java 初始化块,也称为构造代码块,是Java编程语言中的一种特性,用于在对象创建时执行特定的初始化操作。初始化块在类的定义中以 `{}` 包裹的一段代码,没有返回值,也不需要任何参数。根据是否带有 `static` ...

    对象初始化流程梳理对象初始化流程梳理

    在`Person`类中,非静态块和非静态属性`b1`、`b2`会按照它们在类中的顺序执行,然后调用父类构造器`Person()`。 4. **构造器**: - **父类构造器**:父类构造器负责设置父类的非静态属性的初始值,如`Person`类的...

    Java面向对象的相关信息

    执行顺序为:静态代码块 > 构造代码块 > 构造方法。 package和import关键字用于组织和导入类。使用package可以解决类名冲突问题,便于管理大量的类。每个Java源文件都有一个唯一的包名,类似于文件系统的路径。...

    11 继承、super、重写(简化版).docx

    ### 挑战:继承状态下构造方法、静态代码块、代码块的执行顺序 - 构造方法:先执行父类的构造方法(如果有`super()`),再执行子类的构造方法。 - 静态代码块:按类加载顺序执行,每个类只会执行一次。 - 代码块:...

    《java基础入门》第三版 第三~第四章作业.doc

    * 在 Java 中,静态代码块的执行顺序优先于构造代码块和构造方法。 六、Object 类 * 在 Java 中,Object 类是所有类的父亲,用户自定义类默认扩展自 Object 类。 * Object 类提供了一些基本方法,如 equals、...

    Java开发技术大全(500个源代码).

    constructWithPara.java 带参数的构造方法 declareDefault.java 缺省访问权限的使用 declarePrivate.java 私有访问权限的使用 declareProtected.java 保护访问权限的使用 deriveClass.java 子类访问父类变量...

    Java 22道基础面试题.docx

    8. 类的初始化顺序:类的初始化顺序是父类静态成员变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。...

    实验指导20160418计算机软件及应用IT计算机专业资料.doc

    在`StudentDemo`类中,静态代码块在外包的初始化阶段执行,而`main`方法、构造代码块和构造方法的执行顺序取决于它们在代码中的位置。 3. **类的初始化**:第三题进一步探讨了类的初始化过程。在创建`Zi`对象时,会...

    java实验报告(免费下载)

    - 构造代码块(非静态代码块)在创建对象时执行,每个实例化过程都会执行一次。 - 局部代码块(方法内的代码块)在进入该代码块时执行。 - 构造方法用于初始化新创建的对象。 2. **继承与类定义**: - 子类可以...

    Java基础知识汇总

    2. 初始化执行顺序:父静态变量、父静态代码块、子静态变量、子静态代码块、父非静态变量、父非静态代码块、父类构造函数、子非静态变量、子非静态代码块、子类构造函数 五、构造函数: 1. 与类同名,无返回值 2. ...

    Java基础.pdf

    具体的顺序是:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。 接口和抽象类在Java中都是不能...

    Java面向对象程序设计-深入理解继承.pptx

    6. 父类的非静态构造方法 7. 子类的非静态属性 8. 子类的非静态构造方法 在农业信息系统的开发中,继承可以用于构建不同类型的农业数据模型。例如,我们可以创建一个基本的“农田”类作为父类,包含通用的属性如...

    JAVA编程思想笔记

    - 父类非静态代码块 -> 父类构造函数。 - 子类非静态代码块 -> 子类构造函数。 - this或super调用后执行变量初始化。 - 最后执行构造函数剩余部分。 #### 四、泛型 1. **泛型使用**: - 泛型简化了集合的使用...

Global site tag (gtag.js) - Google Analytics