`

类继承初始化顺序

 
阅读更多

    

Class 被创建:

     类变量初始化顺序:

        1. 父类与子类中static 变量在内存中分配空间,并初始化为默认值。数据型为0 或0.0 ,boolean 为false,引用类型为null

        2. 父类的static 代码块 、static 变量定义 执行(执行顺序看类中代码的顺序,哪个在前哪个先执行)

        3.子类的static 代码块 、static 变量定义 执行(执行顺序看类中代码的顺序,哪个在前哪个先执行)

 

   对象实例被创建:

      实例 变量初始化顺序:

       1.首先在堆中中为父类,子类创建空间,并初始化变量为默认值:数据型为0 或0.0 ,boolean 为false,引用类型为null

       1. 父类的 初始化代码块、变量定义执行(执行顺序看类中代码的顺序,哪个在前哪个先执行)

        2. 子类的构建器执行

        3. 子类的 初始化代码块、变量定义执行(执行顺序看类中代码的顺序,哪个在前哪个先执行)

        4. 子类的构建器执行

 

 

实例化子类,并赋值给子类型变量或父类型变量,调用其方法时:

   由于实际类型为子类,所以都是以子类为准执行方法:

    如果子类中有定义,则调用该方法

    如果子类中没有定义,父类中有定义,即继承,则执行父类中的方法

 

实例化子类,并赋值给子类型变量或父类型变量,调用其成员变量时(引用类型.成员变量):

   如果是父类型变量,则调用父类型成员变量

   如果是子类型变量,则调用子类型成员变量

 

即:调用方法--》对象实际类型处理,调用成员变量--》按引用变量的声明类型。

 

public class FatherClass {

    static {
        System.out.println("FatherClass  static init  code piece init :source age value :"+FatherClass.age);
        age = 80;
        System.out.println("FatherClass  static init  code piece init :change age value :"+FatherClass.age);

    }

    {
        System.out.println("FatherClass  init code piece init :source name value ="+this.name);
        name = "father one";
        System.out.println("FatherClass  init code piece init :change  name value ="+this.name);

    }

    public FatherClass(){
        System.out.println(" FatherClass constructor running .....");

    }

    public void printName(){
        System.out.println("FatherClass.printName son.name = "+name);
    }
    public static void printAge(){
        System.out.println("FatherClass.printAge father.age = "+age);
    }

    public void printAgeAndName(){
        System.out.println("FatherClass.printAgeAndName  age:"+this.age+" ,name:"+this.name);
    }
    static int age = 65;
    String name = "father";
}
public class SonClass extends  FatherClass {

    static {
        System.out.println("SonClass  static init  code piece init :source age value :"+SonClass.age);
        age = 20;
        System.out.println("SonClass  static init  code piece init :change age value :"+SonClass.age);
    }

    {
        System.out.println("SonClass  init code piece init :source name value ="+this.name);
        name = "son one";
        System.out.println("SonClass  init code piece init :change  name value ="+this.name);
    }
    public SonClass(){
        System.out.println(" SonClass constructor running .....");
    }


    public static void printAge(){
        System.out.println("SonClass.printAge son.age = "+age);

    }
    public void printName(){
        System.out.println("SonClass.printName  son.name = "+name);
        System.out.println("SonClass.printName  super.name = "+super.name);
    }
    public static void main(String args []){
        SonClass.printAge();
        SonClass son = new SonClass();
        son.printName();
        son.printAgeAndName();
    }
    static int age = 10;
    String name = "son";
}

  

 

 

FatherClass  static int  code piece init :source age value :0
FatherClass  static int  code piece init :change age value :80
SonClass  static init  code piece init :source age value :0
SonClass  static init  code piece init :change age value :20
SonClass.printAge son.age = 10
FatherClass  init code piece init :source name value =null
FatherClass  init code piece init :change  name value =father one
 FatherClass constructor running .....
SonClass  init code piece init :source name value =null
SonClass  init code piece init :change  name value =son one
 SonClass constructor running .....
SonClass.printName  son.name = son
SonClass.printName  super.name = father
FatherClass.printAgeAndName  age:65 ,name:father

 

 

 

分享到:
评论

相关推荐

    Java类继承初始化顺序

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

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

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

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

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

    java中类的初始化顺序

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

    java程序初始化顺序

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

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

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

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

    同时,掌握类变量初始化顺序可以避免因误解而导致的错误,特别是在多线程环境中,对静态变量的并发访问和初始化顺序的控制需要特别注意。 总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程...

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

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

    类初始化顺序示例讲解

    ### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...

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

    在了解类的初始化顺序之前,我们需要了解 JAVA 中的继承关系。在 JAVA 中,一个子类可以继承一个父类,子类可以继承父类的成员变量和方法。同时,子类也可以拥有自己的成员变量和方法。 现在,让我们来看一个简单的...

    java代码的初始化顺序demo

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

    JAVA类的初始化顺序文.pdf

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

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

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

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

    当涉及到继承时,类的初始化顺序略有不同: 1. **父类的静态部分**:首先初始化父类的静态变量和静态初始化块。 2. **子类的静态部分**:接着初始化子类的静态变量和静态初始化块。 3. **父类的非静态部分**:在...

    成员的初始化顺序和多态性

    在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证这些概念。 #### 实验步骤解析 ##### 步骤一...

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

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

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

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

    java类中元素初始化顺序详解

    Java 类的初始化顺序是一个关键的编程概念,尤其对于理解和避免潜在的运行时错误至关重要。在 Java 中,类的元素初始化顺序遵循以下规则: 1. **静态变量与静态初始化块**: 首先,Java 解释器会执行类中的静态...

    简单了解Java类成员初始化顺序

    在非继承类中,Java类成员初始化顺序如下: 1. 首先执行静态变量和final静态常量的初始化,执行顺序为顺序执行(谁在前先执行谁)。 2. 然后执行静态代码块,执行顺序为顺序执行(谁在前先执行谁)。 3. 之后执行...

    Java类初始化顺序

    Java类的初始化顺序是编程中一个非常重要的概念,它涉及到对象的创建过程和成员变量的初始化。当一个Java类被实例化或者其静态成员被访问时,类的初始化过程就开始了。以下详细解释了Java类的初始化顺序: 1. **...

Global site tag (gtag.js) - Google Analytics