了解包括继承在内的初始化,以对所发生的一切有个全局的把握,是很有用的。
(1)当加载一个类时,如果编译器发现它有父类,那么首先加载父类,如果父类之上还有父类,那就继续加载上面的父类。
(2)接下来,父类的static初始化就会被执行,然后是子类的
static初始化
,以此类推。这种方式很重要,因为子类的static初始化可能会依赖于父类的成员能否被正确初始化。
(3)至此为此,必要的类都加载完毕,对象就可以创建了。首先,父类对象中所有的成员变量执行初始化(静态的成员变量在上一步已执行了初始化),然后父类的构造器会被调用,接着子类的成员变量执行初始化,子类的构造器被调用。如果还有子类就一直按这个顺序执行下去。
代码
package com.thinkingInJava;
class Insect{
private int i = 9;
protected int j;
Insect(){
System.out.println("i=" + i + ",j=" + j);
j = 39;
}
private static int x1 = printInit("static Insect.x1 initialized.");
static int printInit(String s){
System.out.println(s);
return 47;
}
}
public class Beetle extends Insect{
private int k = printInit("Beetle.k initialized..");
public Beetle(){
System.out.println("k= " + k);
System.out.println("j= " + j);
}
private static int x2 = printInit("static Beetle.x2 initialized.");
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Beetle constructor!");
Beetle b = new Beetle();
}
}
输出:
static Insect.x1 initialized.
static Beetle.x2 initialized.
Beetle constructor!
i=9,j=0
Beetle.k initialized..
k= 47
j= 39
分享到:
相关推荐
为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```java class Base { public Base() { System.out.println("Base constructor"); } } class Derived extends Base { public ...
当我们谈论“Java类继承初始化顺序”时,涉及到的关键知识点包括构造器、成员变量的初始化、super关键字以及方法的覆盖。 首先,了解类初始化的顺序至关重要。当创建一个子类实例时,初始化过程遵循以下步骤: 1. ...
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
3. **继承与初始化** `Father.java`可能涉及到继承的概念。在Java中,子类会继承父类的所有非私有字段和方法。当创建子类对象时,首先会执行父类的构造函数,然后是子类的构造函数。这确保了父类的状态在子类对象...
`init`文件可能包含了各种构造函数的实现,展示它们如何被调用以及与初始化块交互的方式。 5. **成员变量初始化**: Java允许我们在变量声明时进行初始化。这种初始化发生在构造函数之前,因此在实例初始化块之前...
6. **类初始化与类加载器**: - 类的初始化是由对应的类加载器触发的,当且仅当以下条件之一满足时: - 遇到new关键字实例化对象; - 遇到静态字段(非final)并对其进行访问; - 遇到静态方法的调用; - 使用...
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
这个顺序表明,无论类之间的继承关系如何,初始化顺序始终是:静态变量和静态初始化块先于非静态成员。在创建对象时,父类的初始化先于子类。这是Java语言规范所规定的,确保在子类访问父类的静态或非静态成员时,...
3. **静态成员变量与实例成员变量的初始化顺序** ```java public class TestOrder { // 静态成员变量初始化 public static TestA a = new TestA(); // 静态初始化块 static { System.out.println("静态初始...
2. **继承关系中的初始化顺序**:在继承关系中,父类的成员变量与初始化块会在子类的对应部分之前执行。 3. **初始化块与成员变量初始化的顺序**:如果静态成员变量定义与静态初始化块同时存在,则先执行静态成员...
在本文中,我们将详细介绍Java类继承关系中的初始化顺序,并通过实例形式对比分析Java非继承关系中的初始化与继承关系中的初始化相关原理与操作技巧。 首先,让我们来了解Java类继承关系中的初始化顺序。在Java中,...
本文将深入探讨Virtio_blk初始化流程及其在qemu-kvm中的实现机制。 首先,我们要理解在qemu-kvm中创建一个对象所涉及的三个关键组成部分:类型(type)、类(class)和实例(instance)。类型将类与实例关联起来,类定义...
【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 ) https://hanshuliang.blog.csdn.net/article/details/113735644 博客源码快照
在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。...通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。
### 成员的初始化顺序 #### 实验背景与目标 在Java编程语言中,理解成员变量的初始化顺序对于正确地设计和实现类结构至关重要。通过本实验,我们将深入了解成员变量的初始化顺序,以及如何通过实际代码示例来验证...
Java关于含有继承类的成员初始化过程讲解 titre1:Java中的继承类成员初始化过程 在Java中,继承类的成员初始化过程是一个复杂且容易让人困惑的地方。今天,我们将通过一个具体的实例来讲解这个过程,以帮助读者...
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...
Java的初始化与清理是编程过程中至关重要的环节,它关乎到程序的正确运行和资源的有效管理。本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即...
5. **继承与初始化列表**: - 在继承关系中,只有初始化列表能用于初始化基类的私有成员。如果基类的某个成员需要初始化,必须在派生类的构造函数初始化列表中显式指定。 6. **示例**: ```cpp class MyClass { ...