`
hwy1782
  • 浏览: 153367 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

继承与初始化

阅读更多

 

/** 
 * @author hwy1782@gmail.com 
 * @creation date 2010-9-30 下午04:47:19 
 * 
 */


class Insect{
	
	private int i = 9;
	protected int j;
	private static int x1 = printInit("static Insect.x1 initialized");
	
	public Insect() {
		System.out.println("i = "+i+" j = "+j);
		j = 39;
	}
	
	public static int printInit(String str){
		System.out.println(str);
		return 47;
	}
}

public class Beetle extends Insect{
	
	private int k = printInit("Beelte.k initialized");
//	private int x2 = printInit("static Beetle.x2 initialized");
	private static int x2 = printInit("static Beetle.x2 initialized");
	
	public Beetle() {
		System.out.println("k = "+k);
		System.out.println("j = "+j);
	}
	
	public static void main(String[] args) {
		System.out.println("Beelte Constructor");
		Beetle b = new Beetle();
	}
	
}

 

   这两个类之间的关系如下:



 在Beetle上运行java时的步骤:

 

 1. 类加载期

 

第一步: 试图访问Beetle中的main()方法,(该方法为一个static方法)。

第二步: ClassLoader开始启动并Beetle类的编译代码。

第三步: 若在类加载过程中发现有基类的存在(可以通过关键字extends判断),则继续加载其基类。

第四步: 若基类还有基类则继续加载(循环进行)。

第五部: 初始化基类的类属性(即static属性),然后初始化是子类的static属性

 

至此,类已经加载完毕,可以创建对象。

 

 2. 类创建期

 

在类加载完毕之后,可以创建对象

第一步: 实例变量中所有基本类型设为默认值,引用设为null

第二步: 调用基类构造函数(自动调用不含参数 或者  super调用含参数 构造函数)

第三步: 实例变量初始化

第四步: 构造器其余部分被执行

 

完毕!

 


 

 

 

 

运行结果如下:

static Insect.x1 initialized
static Beetle.x2 initialized
Beelte Constructor
i = 9 j = 0
Beelte.k initialized
k = 47
j = 39
  • 大小: 15.8 KB
  • 大小: 94.2 KB
分享到:
评论

相关推荐

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

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

    Java类继承初始化顺序

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

    Python代码-多继承的初始化问题的解决.py

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

    Python代码-多层继承中的属性初始化问题.py

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

    类和对象的初始化过程.zip

    3. **继承与初始化** `Father.java`可能涉及到继承的概念。在Java中,子类会继承父类的所有非私有字段和方法。当创建子类对象时,首先会执行父类的构造函数,然后是子类的构造函数。这确保了父类的状态在子类对象...

    java代码的初始化顺序demo

    `init`文件可能包含了各种构造函数的实现,展示它们如何被调用以及与初始化块交互的方式。 5. **成员变量初始化**: Java允许我们在变量声明时进行初始化。这种初始化发生在构造函数之前,因此在实例初始化块之前...

    java程序初始化顺序

    6. **类初始化与类加载器**: - 类的初始化是由对应的类加载器触发的,当且仅当以下条件之一满足时: - 遇到new关键字实例化对象; - 遇到静态字段(非final)并对其进行访问; - 遇到静态方法的调用; - 使用...

    Python代码-使用super简化格式解决多继承的初始化时参数传递问题.py

    ——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!

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

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

    java中类的初始化顺序

    3. **静态成员变量与实例成员变量的初始化顺序** ```java public class TestOrder { // 静态成员变量初始化 public static TestA a = new TestA(); // 静态初始化块 static { System.out.println("静态初始...

    类初始化顺序示例讲解

    2. **继承关系中的初始化顺序**:在继承关系中,父类的成员变量与初始化块会在子类的对应部分之前执行。 3. **初始化块与成员变量初始化的顺序**:如果静态成员变量定义与静态初始化块同时存在,则先执行静态成员...

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

    在本文中,我们将详细介绍Java类继承关系中的初始化顺序,并通过实例形式对比分析Java非继承关系中的初始化与继承关系中的初始化相关原理与操作技巧。 首先,让我们来了解Java类继承关系中的初始化顺序。在Java中,...

    virtio_blk初始化流程

    本文将深入探讨Virtio_blk初始化流程及其在qemu-kvm中的实现机制。 首先,我们要理解在qemu-kvm中创建一个对象所涉及的三个关键组成部分:类型(type)、类(class)和实例(instance)。类型将类与实例关联起来,类定义...

    【Flutter】Dart 面向对象 ( 类定义 类的继承 私有变量 可选参数 默认参数 初始化列表 ).zip

    【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 ) https://hanshuliang.blog.csdn.net/article/details/113735644 博客源码快照

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

    在Java编程语言中,ClassLoader是核心组件之一,它负责加载类到JVM(Java虚拟机)中。...通过学习这些知识点,开发者可以更好地优化代码、设计更健壮的系统,并解决与类加载和初始化相关的复杂问题。

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

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

    Java关于含有继承类的成员初始化过程讲解

    Java关于含有继承类的成员初始化过程讲解 titre1:Java中的继承类成员初始化过程 在Java中,继承类的成员初始化过程是一个复杂且容易让人困惑的地方。今天,我们将通过一个具体的实例来讲解这个过程,以帮助读者...

    c++编程思想 内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数

    全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...

    详解Java的初始化与清理

    Java的初始化与清理是编程过程中至关重要的环节,它关乎到程序的正确运行和资源的有效管理。本文将深入探讨Java中的初始化过程,包括对象的构造器初始化以及类成员的初始化顺序,同时也会涉及Java的垃圾回收机制,即...

    c++基础语法:构造函数初始化列表

    5. **继承与初始化列表**: - 在继承关系中,只有初始化列表能用于初始化基类的私有成员。如果基类的某个成员需要初始化,必须在派生类的构造函数初始化列表中显式指定。 6. **示例**: ```cpp class MyClass { ...

Global site tag (gtag.js) - Google Analytics