`
cheng198412
  • 浏览: 3006 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Java 静态语句块、语句块、构造函数执行顺序

阅读更多

一、 代码执行流程

       先看看代码块的运行结果,再总结代码块的执行顺序

 

package com.crn.demo.exam;

class Parent{    
    static String name = "hello";    
    
    {    
        System.out.println("3 parent  block");    
    }    
    static {    
        System.out.println("1 parent static block");    
    }    
    
    public Parent(){    
        System.out.println("4 parent constructor");    
    }    
}    
    
class Child extends Parent{    
    static String childName = "hello";    
    
    {    
        System.out.println("5 child  block");    
    }    
    static {    
        System.out.println("2 child static block");    
    }  
    
    public Child(){    
        System.out.println("6 child constructor");    
    }    
}    
    
public class StaticIniBlockOrderTest {    
    
    public static void main(String[] args) {    
        new Child();//语句(*)    
    }    
}  

代码执行结果如下:

1 parent static block

2 child static block

3 parent  block

4 parent constructor

5 child  block

6 child constructor

 

二、 Java 静态语句块、语句块、构造函数执行顺序

 1)执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容;

 

 2)当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构   造方法;

 

  3)父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。

 

      总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。
      而且子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

 

分享到:
评论

相关推荐

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

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

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

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

    Java类的完整构造执行顺序

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

    重写重载构造函数

    在此示例中,基类的构造函数在执行构造函数块之前被调用。base关键字可带参数使用,也可不带参数使用。构造函数的任何参数都可用作base的参数,或用作表达式的一部分。 重写重载构造函数是面向对象编程中的一种重要...

    C#中构造函数和析构函数的用法

    构造函数的执行顺序是从基类到派生类,确保所有层次的初始化都能正确进行。 #### 析构函数:清理非托管资源 **1. 原理与作用** 析构函数是一种特殊的成员函数,用于执行对象销毁前的清理工作,尤其是在处理非托管...

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

    * 继承树中的从最高层开始的实例语句块{}、然后对应的构造函数、以及构造函数中调用的方法 * (如果是重写即子类将父类的实例方法重写类,则调用子类的,如果是隐藏即方法则父类中声明为静态方法,则调用父类本身的...

    c#函数方法,构造函数与析构函数

    在C#编程语言中,函数方法、构造函数与析构函数是对象导向编程的重要组成部分,它们各自承担着不同的角色,并且对于程序的正确运行和优化性能具有重要作用。下面将详细介绍这三个概念及其用法。 ### 函数方法 在C#...

    在Java中自由块的执行顺序

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

    深入浅析Java中普通代码块、构造代码块与静态代码块

    每当创建类的新实例时,构造代码块就会执行,且它的执行顺序优先于类的构造函数。这意味着,如果在构造代码块中有初始化操作,这些操作会在构造函数执行之前完成。如果类中有多条构造代码块,它们也会按照在类中定义...

    java中static属性学习

    #### 四、静态语句块与构造函数 除了静态成员变量和静态方法之外,Java还支持静态语句块。静态语句块通常用于执行一些只需要运行一次的初始化操作,在类加载时被执行。 ##### 示例代码分析: ```java class ...

    C++中构造函数与析构函数的调用顺序详解

    3. **构造函数体内的语句**:最后,执行构造函数主体中的代码。 例如,在给定的代码示例中,类`E`继承自`B`和`A`,并且拥有成员对象`D`和`C`。根据上述规则,构造顺序为:`B(5)`(因为`B(5)`在成员初始化列表中被...

    C 程序设计课件:第12章 构造函数.ppt

    构造函数调用的顺序遵循成员在类定义中的声明顺序,这意味着初始化列表中的成员初始化顺序也应与声明顺序一致。 最后,析构函数是与构造函数相对的特殊成员函数,用于在对象生命周期结束时执行清理工作,如释放动态...

    C# 静态构造函数使用总结

    7. **执行顺序**:当有类继承关系时,基类的静态构造函数先于派生类的静态构造函数执行。 8. **不可显式调用**:由于静态构造函数由系统自动调用,我们无法在代码中显式地调用它,也无法控制它的执行时机。 9. **...

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    在Java编程语言中,代码块是程序中一组按顺序执行的语句,它们可以有特定的作用域和执行时机。在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码...

    编程思想14章构造函数的初始化表达式

    这是构造函数体之外的一组初始化语句,它以冒号(:)开始,然后列出要初始化的成员及其对应的值。例如: ```cpp MyClass::MyClass(int val) : member1(val), member2(val * 2) {} ``` 这里,`member1`和`member2`在...

    Java 实例 - Enum(枚举)构造函数及方法的使用源代码-详细教程.zip

    尽管枚举默认是final和静态的,但我们仍然可以为枚举类型定义构造函数。枚举构造函数主要用于初始化枚举实例的内部状态,但需要注意,构造函数不能被外部直接调用,只能在枚举实例的定义中使用。例如: ```java ...

    c++模拟测试题

    11、A 为类,执行语句 A a1,a2(2),*a3[3];调用了 A 的构造函数 6 次。N 12、派生类后于基类构造,先于基类释放。Y 13、类是对象的抽象,对象是类的具体化。Y 14、二进制文件中数据的存放格式和计算机内存中存储的...

    2020阶段测试2复习题STU答案.docx

    虚基类的构造函数会在非虚基类之前调用(选项B错误),如果有多个虚基类,构造函数按声明顺序调用(选项C正确),即使虚基类是从非虚基类派生的,也会先调用基类构造函数,然后是派生类构造函数(选项D正确)。...

    java经典小程序-函数小程序

    Java允许在同一个类中定义多个同名函数,只要它们的参数列表不同(参数个数、类型或顺序不同)。这是方法重载的概念,有助于提高代码的可读性和复用性。 4. **递归函数**: 递归函数是调用自己的函数,通常用于...

Global site tag (gtag.js) - Google Analytics