/**
* @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
分享到:
相关推荐
类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序类继承的初始化顺序
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
具体内容见博客
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...
【Flutter】Dart 面向对象 ( 类定义 | 类的继承 | 私有变量 | 可选参数 | 默认参数 | 初始化列表 ) https://hanshuliang.blog.csdn.net/article/details/113735644 博客源码快照
类型定义中不一定非要包含完整的类Class和实例instance的定义,如果没有新增的成员,则完全可以从父类型继承过来,qemu-kvm初始化的代码会自动找到父类型并使用父类型的定义。 type的继承关系通过parent指针实现:...
这实际上是在考查我们对于继承情况下类的初始化顺序的了解。 我们大家都知道,对于静态变量、静态初始化块、变量、初始化块、构造器,它们的初始化顺序依次是(静态变量、静态初始化块)>(变量、初始化块)>构造器...
主要介绍了Java类继承关系中的初始化顺序,结合实例形式详细对比分析了Java非继承关系中的初始化与继承关系中的初始化相关原理与操作技巧,需要的朋友可以参考下
memset初始化std::string对象时,按字节顺序将std::string对象所在空间清零,破坏了std::string对象的成员结构,使Myroxy指针资源变为野指针,操作其迭代器会出现不可预知的异常,在存储字符串时可能分配了不必要的...
主要介绍了python类继承与子类实例初始化用法,实例分析了Python类的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
——学习参考资料:仅用于个人学习使用! 本代码仅作学习交流,切勿用于商业用途,否则后果自负。若涉及侵权,请联系,会尽快处理! 未进行详尽测试,请自行调试!
一定要用super(Teacher, self).__init__(name, gender)去初始化父类,否则,继承自 Person 的 Teacher 将没有 name 和 gender。 class Person(object): def __init__(self, name, gender): self.name = name self...
今天小编就为大家分享一篇Java关于含有继承类的成员初始化过程讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
think in java 源码 Think-In-Java-Code Thinking In Java 书中源码以及课后练习代码(从第7章开始随着看书的进度一步步更新) ...继承与初始化 第八章 多态 8.1 再论向上转型 8.2 转机 8.2.2 产生正确的行为
实验6 继承与派生; 继承与派生、单继承与多继承的概念; 基类与派生类的定义及使用方法,派生类对象的定义与初始化方法; 继承与派生过程中,把派生类作为基类构成类族的概念及虚基类的概念;
几个月之前,接触Android recovery源代码的时候,看ScreenRecoveryUI类的时候,那时候C++基础还不是特别好,一直不明白以下的初始化方式: 下面这个是Recovery的一个构造函数,代码位于:screen_ui.cpp,它的类的...
全书共分十八章,内容涉及对象的演化、数据抽象、隐藏实现、初始化与清除、函数重载与缺省参数、输入输出流介绍、常量、内联函数、命名控制、引用和拷贝构造函数、运算符重载、动态对象创建、继承和组合、多态和虚...