/*
测试3个内容:
类加载顺序
子父类执行过程
对象初始化过程
从几次试验我们看到
当执行到类时,类被加载到内存,并初始化
静态成员被加载到共享区
不用实例化对象就可以调用静态资源
静态成员变量,静态成员方法,静态代码块,只初始化一次
而普通变量,普通代码块,构造方法,在每次实例化对象时都要初始化
子类对象要初始化时,
会先初始化父类静态成员和静态代码块,
再初始化子类静态成员和静态代码块,
然后是父类普通代码块,父类构造方法
然后是子类普通代码块,子类构造函数
当子类名直接调用继承自父类的静态成员时,子类不会初始化,而只初始化父类(因为这已经足够了)
补充:子类的所有构造方法中,如果未指定父类构造方法,则第一条语句是隐式的super(),即父类的空参数构造方法*/
class Fu //父类
{
public static String staticField = "父类-静态变量";
public static String extend = "父类-静态变量extend"; //让子类调用
public String field = "父类-普通变量";
public Fu()
{
System.out.println("父类-构造方法");
}
static
{
System.out.println("Fu_static: 父类-静态初始化块");
System.out.println("Fu_static:"+staticField);
}
{
System.out.println("Fu_普通块:"+field);
System.out.println("Fu_普通块:"+"父类-初始化块");
}
}
class Zi extends Fu //子类
{
public static String staticField = "子类 静态变量";
public String field = "子类 普通变量";
{
System.out.println("Zi_普通块:"+field);
System.out.println("Zi_普通块:"+"子类 初始化块");
}
public Zi()
{
System.out.println("子类 子类构造方法");
}
static
{
System.out.println("Zi_static:"+"子类 静态初始化块");
System.out.println("Zi_static:"+staticField);
}
}
class Demo
{
public static void main(String args[]) throws Exception
{
System.out.println("main方法");
//Thread.sleep(2000);
//System.out.println("Zi.staticField:"+Zi.staticField);
//Thread.sleep(2000);
//System.out.println("...");
//Fu fu = new Fu();
Thread.sleep(2000);
System.out.println("");
Zi zi = new Zi();
System.out.println("");
Zi zi2 = new Zi();
//System.out.println(Zi.extend); //子类名调用父类静态成员
}
}
执行结果情况太多就不贴了
分享到:
相关推荐
类--初始化块"); 39. } 40. // 构造器 41. public SubClass() { 42. System.out.println("子类--构造器"); 43. } 44. 45. public static void main(String[]...因此,掌握类的初始化顺序是每个Java开发者必备的知识点。
- 当多个线程同时尝试初始化同一个类时,Java保证只会执行一次类的初始化过程。这是由JVM的同步机制保证的,避免了数据竞争的问题。 5. **接口初始化**: - 接口没有实例变量,所以不存在实例初始化阶段。接口的...
当创建一个子类实例时,初始化过程遵循以下步骤: 1. **静态初始化**:首先,执行父类的静态初始化块,然后执行子类的静态初始化块。静态初始化块用于初始化类级别的静态变量,它们只在类加载时执行一次。 2. **...
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
当一个Java类被实例化或者其静态成员被访问时,类的初始化过程就开始了。以下详细解释了Java类的初始化顺序: 1. **初始化父类**: 在子类的构造方法执行之前,首先会调用父类的构造方法。如果子类没有明确指定...
总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...
本文将详细探讨Java中类的初始化过程及其顺序,并通过具体的代码示例来帮助理解这一过程。 #### 二、基础知识 1. **静态成员变量(Static Fields)**:在类加载时初始化。 2. **实例成员变量(Instance Fields)**...
本篇文章将围绕“类继承的初始化顺序”这一主题展开,详细解析初始化过程中涉及的关键概念和技术细节。 ### 类继承的初始化顺序概述 在面向对象语言中(如Java、C#等),当创建一个继承自某个基类的子类对象时,会...
总之,理解并有效地使用静态和对象初始化块是Java开发中的关键技能,它们可以帮助我们更好地控制类和对象的初始化过程,确保代码的高效性和正确性。在实际编程中,我们应该根据需求谨慎选择合适的初始化策略,以优化...
Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 在 Java 语言中,每个变量必须先声明,然后才能使用。声明变量时必须指定该变量的数据类型。...
Java 对象初始化顺序是指在 Java 程序中,对象的初始化过程中发生的顺序问题。这是 Java 编程语言的基础知识点之一,但是许多学生在学习和使用时总是感到困惑和困难。 二、JVM 执行过程中的“礼让”原则 JVM 在...
Spring 中控制 2 个 bean 的初始化顺序 在 Spring 框架中,控制多个 bean 的初始化顺序是一个常见的问题。本篇文章将详细介绍如何控制 2 个 bean 的初始化顺序,提供了多种实现方式,并分析了每种方式的优缺。 ...
### Java 类中静态域、块,非静态域、块,构造函数的初始化顺序 #### 一、概述 在 Java 编程语言中,类的初始化顺序对于理解程序的行为至关重要。特别是当涉及到静态域(静态变量)、非静态域(实例变量)、静态块...
【深入Java虚拟机(三)——类的生命周期(下)类的初始化1】 类的生命周期在Java中是一个关键的概念,它涵盖了从加载到卸载的整个过程。在类的生命周期中,初始化阶段是非常重要的,因为它涉及到类的静态变量的赋值...
Java初始化与方法是Java编程语言中的核心概念,它们在程序执行过程中起着至关重要的作用。本文将深入探讨Java中的初始化过程、方法的定义与调用,以及与之相关的源码和工具应用。 首先,让我们从类的初始化开始。在...
理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...
Java 初始化顺序详解 在 Java 中,变量可以分为两类:类变量(静态变量)和实例变量(对象变量)。类变量是使用 static 关键字修饰的变量,它们属于类,而不是对象。实例变量则是没有使用 static 关键字修饰的变量...
特别要注意的是,在子类的初始化过程中,子类的静态变量和静态初始化块会在父类的变量、初始化块、构造器之前就被初始化。也就是说,在父类完全初始化完毕之前,子类的静态成员已经完成初始化了。 这个顺序很重要,...