看Java编程思想总结下自己未懂的吧:
class A {
private int i = 1;
protected int j ;
A (){
System.out.println("i = " + i + ", j = " + j);
j = 55;
}
private static int a1 = print("static A.a1 is initialized");
static int print(String s) {
System.out.println(s);
return 11;
}
}
public class B extends A {
private int k = print("B.k is initialized");
public B (){
System.out.println("k = " + k);
System.out.println(" j = " + j);
}
private static int b2 = print("static B.b2 is initialized");
public static void main(String[] args) {
System.out.println("begin new Object");
B b = new B();
}
}
输出顺序如下:
static a1 is initialized
static B.b2 is initialized
begin
i = 1, j = 0
B.k is initialized
k = 11
j = 55
很是不解,为了加深印象,笔记之以备以后复习
当我们运行此程序时,第一件事情肯定是访问B的main方法,于是类加载器开始启动并找出B类被编译的的class文件,在对其加载过程中编译器看到他还有父类(根据extends知道)于是继续进行加载父类,必要的类加载完毕后,才会new对象。
因为成员初始化是先静态(创建对象之前就会被初始化),
后非静态的。不管你是否new对象,都会输出:
static a1 is initialized
static B.b2 is initialized
然后开始创建对象,输出:
i = 1, j = 0
B.k is initialized
k = 11
j = 55
分享到:
相关推荐
为了更好地理解类继承初始化顺序的概念,下面通过一段示例代码来进行详细分析: ```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 { ...