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类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```java class Base { public Base() { System.out.println("Base constructor"); } } class Derived extends Base { public ...
这个顺序表明,无论类之间的继承关系如何,初始化顺序始终是:静态变量和静态初始化块先于非静态成员。在创建对象时,父类的初始化先于子类。这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,...
### Java中类的初始化顺序详解 #### 一、概述 在Java编程语言中,类的初始化是一个非常重要的概念。类的初始化涉及到多个方面,包括静态成员变量、实例成员变量、静态初始化块、实例初始化块以及构造函数等。本文...
以下是对Java程序初始化顺序的详细说明: 1. **类加载阶段**: - **加载**:当Java虚拟机(JVM)首次遇到一个类的引用时,会通过类加载器进行加载。加载过程包括找到类的.class文件,读取其字节码,并转化为内存中...
Java类继承关系中的初始化顺序实例详解 Java类继承关系中的初始化顺序是Java编程语言中的一個重要概念。该概念关系到类的初始化顺序,静态成员变量的初始化顺序,普通成员变量的初始化顺序等。在本文中,我们将详细...
同时,掌握类变量初始化顺序可以避免因误解而导致的错误,特别是在多线程环境中,对静态变量的并发访问和初始化顺序的控制需要特别注意。 总之,深入理解Java的ClassLoader机制和类变量初始化顺序是提升Java编程...
在Java中,类的初始化顺序是面试中的经典问题之一,它涉及到继承、静态成员以及实例成员等多个方面。正确理解类的初始化顺序对于编写正确、高效的代码至关重要。 首先,需要了解Java类初始化的基本规则,即在类的...
### 类初始化顺序详解 本文将基于给定的Java示例代码深入探讨类初始化的顺序问题。这不仅是Java语言的关键特性之一,在其他面向对象语言(如C++、.NET)中也有相似的概念。理解这一概念有助于程序员更好地掌握面向...
在了解类的初始化顺序之前,我们需要了解 JAVA 中的继承关系。在 JAVA 中,一个子类可以继承一个父类,子类可以继承父类的成员变量和方法。同时,子类也可以拥有自己的成员变量和方法。 现在,让我们来看一个简单的...
总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...
子类 --构造器 这个输出揭示了在继承关系中类的初始化顺序: 1. **静态成员和静态初始化块**:首先,会按照父类到子类的顺序初始化静态变量和执行静态初始化块。在上面的例子中,"父类 --静态变量" 和 "子类 --静态...
本文将深入探讨Java中类的初始化顺序,特别是在有继承关系的情况下,各个初始化阶段的执行流程,以及这一顺序的重要性。 首先,让我们明确类初始化的含义。在Java中,类的初始化主要涉及以下三个阶段: 1. 静态...
当涉及到继承时,类的初始化顺序略有不同: 1. **父类的静态部分**:首先初始化父类的静态变量和静态初始化块。 2. **子类的静态部分**:接着初始化子类的静态变量和静态初始化块。 3. **父类的非静态部分**:在...
在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证这些概念。 #### 实验步骤解析 ##### 步骤一...
Java对象的初始化顺序是一个关键的编程概念,它涉及到类加载、静态初始化、实例初始化等多个步骤。下面我们将详细探讨这些步骤。 首先,当程序运行并创建一个新的对象时,JVM(Java虚拟机)会按照特定的顺序来初始...
"Java 对象初始化顺序学习指南" 在学习 Java 编程语言时,对象初始化顺序是一个非常重要的知识点,但是许多学生却感到困惑和困难。事实上,Java 对象初始化顺序并不难理解,只需要掌握“礼让”原则和 JVM 的执行...
Java 类的初始化顺序是一个关键的编程概念,尤其对于理解和避免潜在的运行时错误至关重要。在 Java 中,类的元素初始化顺序遵循以下规则: 1. **静态变量与静态初始化块**: 首先,Java 解释器会执行类中的静态...
在非继承类中,Java类成员初始化顺序如下: 1. 首先执行静态变量和final静态常量的初始化,执行顺序为顺序执行(谁在前先执行谁)。 2. 然后执行静态代码块,执行顺序为顺序执行(谁在前先执行谁)。 3. 之后执行...
Java类的初始化顺序是编程中一个非常重要的概念,它涉及到对象的创建过程和成员变量的初始化。当一个Java类被实例化或者其静态成员被访问时,类的初始化过程就开始了。以下详细解释了Java类的初始化顺序: 1. **...