程序貌似是Java程序思想上的
/*
@TODO 程序执行过程*/
class Base
{
static int s1 = prt("s1 initialized.", 11);
int i1 = prt("i1 initialized.", 12);
Base()
{
System.out.println("Base()");
System.out.println("s1 = " + s1 + ", i1 = " + i1);
draw();
}
void draw()
{
System.out.println("Base.draw:s1= " + s1 + " ,i1 = " + i1);
}
static int prt(String s,int num)
{
System.out.println(s);
return num;
}
}
class Cleanser extends Base
{
static int s2 = prt("s2 initialized.", 21);
int i2 = prt("i2 initialized.", 22);
Cleanser()
{
System.out.println("Cleanser()");
System.out.println("s2 = " + s2 + ", i2 = " + i2);
}
Cleanser(String a)
{
System.out.println("Cleanser(" + a + ")");
System.out.println("s2 = " + s2 + ", i2 = " + i2);
}
void draw()
{
System.out.println("Cleanser.draw:s2 = " + s2 + ", i2 = " + i2);
}
}
public class ExplicitStatic extends Cleanser
{
static int s3 = prt("s3 initialized.", 31);
int i3 = prt("i3 initialized.", 32);
ExplicitStatic()
{
super("ExplicitStatic");
System.out.println("ExplicitStatic");
System.out.println("s3 = " + s3 + ", i3 = " + i3);
}
public static void main(String[] args)
{
ExplicitStatic x = new ExplicitStatic();
}
}
输出结果:
s1 initialized.
s2 initialized.
s3 initialized.
i1 initialized.
Base()
s1 = 11, i1 = 12
Cleanser.draw:s2 = 21, i2 = 0
i2 initialized.
Cleanser(ExplicitStatic)
s2 = 21, i2 = 22
i3 initialized.
ExplicitStatic
s3 = 31, i3 = 32
引用自: www.codepub.com 源码网资料Java编程思想读书笔记
初始化顺序为:
1) 加载代码(.class文件)
2) 初始化class的静态成员,初始化顺序了“从里到外”,即从base class开始。
3) 在derived class的构造函数中调用base class的构造函数。
如果在derived class的构造函数中没有通过super()显式调用调用base class的构造函数,编译器会调用bass class的default构造函数并自动生成相应的调用语句,从而产生一个base class实例。如果在derived class的构造函数中通过super()显示调用了父类的构造函数,则调用所指定的构造函数。调用构造函数的调用顺序是“从里到外”。
4) 调用derived class的构造函数。
**:当base class没有default构造函数时,必须在derived class的构造函数中通过super显示调用base class的构造函数。
例:下面代码的初始化过程为:
1) 装载ExplicitStatic的代码(装载ExplicitStatic.class文件)。
2) 发现ExplicitStatic有关键字extends,装载ExplicitStatic的base class的代码(装载Cleanser.class文件)。
3) 发现Cleanser有关键字extends,装载Cleanser的base class的代码(装载Base.class文件)。
4) 初始化Base class中的静态成员。
5) 初始化Cleanser class中的静态成员。
6) 初始化ExplicitStatic class中的静态成员。
如果把(c)处的代码注释掉,那么初始化工作到此就结束了。
7) 为ExplicitStatic对象分配存储空间,并把存储空间初始化为0。
8) 在ExplicitStatic class的构造中调用super("ExplicitStatic")(在ExplicitStatic class的构造函数中显式调用父类的构造函数),试图产生一个Cleanser class实例。
9) 为Cleanser对象分配存储空间,并把存储空间初始化为0。
10) 由于Cleanser class又是继承自Base class,会在Cleanser class的构造函数中通过super()(由于没有显式调用父类的构造函数,所以自动调用父类的default构造函数)调用父类的构造函数,试图产生一个Cleanser class实例。
11) 产生一个Base class实例。先初始化成员变量,再调用构造函数。
12) 回到Cleanser class,产生一个实例。首先初始化Cleanser class中的成员数据,再执行构造函数Cleanser(String a)中的其余部分。
13) 回到ExplicitStatic class,产生一个实例。首先初始化ExplicitStatic class中的成员数据,再执行构造函数ExplicitStatic ()中的其余部分(System.out.println(“ExplicitStatic()”))。
结果中: Cleanser.draw:s2 = 21, i2 = 0
由于在Base()中调用draw()时,Cleanser中的i2还未进行初始化,而在为Cleanser对象分配存储空间时,把存储空间初始化为0,所以此时i2为0。
分享到:
相关推荐
Linux内核的执行流程是操作系统启动过程的核心部分,它涉及到从硬件初始化到用户空间应用程序运行的各个阶段。这里我们将深入探讨Linux内核的启动过程,主要聚焦于从启动到`main.c`执行的关键步骤。 首先,Linux...
### 机器人-SPS程序-简析 #### 一、引言 在现代工业自动化领域,机器人技术的应用日益广泛,而可编程逻辑控制器(PLC)作为实现工业自动化的重要组成部分,其程序设计对于确保生产效率与产品质量至关重要。本文将...
这个例子展示了如何在C#中创建一个`OracleCommand`对象,设置存储过程的参数,并执行存储过程。注意,调用存储过程时需要指定完整的包名和过程名,如`OPERATE_PRODUCTION.GetPro`。 总之,Oracle的Package提供了一...
【简析逻辑推演--程序设计在现实生活中的应用】 逻辑推演是解决问题的关键技术,尤其在计算机科学领域,它在程序设计中起着至关重要的作用。逻辑推演涉及利用已知信息,通过分析和判断,得出未知信息的过程。在...
本文将对化工设计过程中电气与自动化仪表的应用进行简要分析,重点探讨选型要求、应用原则以及可靠性技术措施等方面。 首先,电气设备是化工生产中不可或缺的部分,包括发电、输电设备,电机保护和电力监控系统等。...
Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战Java中的泛型简析实战...
在这个例子中,我们使用 `ROW_NUMBER()` 函数为数据行分配一个行号,这个行号是根据 `ProductID` 的降序排列生成的。然后在外部查询中,我们筛选出属于当前页的行。`BETWEEN` 语句确保了只选取当前页的数据,`@...
随着广播设备的数字化,许多库存的电子管大都失去了用武之地,尤其是中小功率电子管,其数量还很多。这些电子管,弃之可惜,不妨将其利用起来自制成小功率电子管监听功放。下面介绍的电子管功放就是用最常见的电子管...
简析电子信息管理平台构建过程及要点 (1).pdf
【简析J2EE应用程序中数据库类的设计模式】 在J2EE应用程序的开发过程中,数据库类的设计至关重要,它直接影响到系统的可维护性、扩展性和性能。本文主要探讨在不使用EJB技术的情况下,如何设计数据库类,特别是...
首先,多任务是UCOS的核心特性之一,它允许系统同时执行多个任务,每个任务都可以看作是一个独立的程序执行流。在UCOS中,任务通过优先级进行调度,高优先级的任务会优先得到CPU资源。任务之间通过信号量、消息队列...
### 单片机定时器汇编程序解析 #### 一、单片机基础知识概述 单片机是一种将中央处理器(CPU)、存储器、输入/输出接口等集成在一块芯片上的微型计算机系统。它广泛应用于各个领域,特别是工业控制、家用电器、...
【嘉世咨询】2024休闲食品行业简析报告.pdf【嘉世咨询】2024休闲食品行业简析报告.pdf【嘉世咨询】2024休闲食品行业简析报告.pdf【嘉世咨询】2024休闲食品行业简析报告.pdf【嘉世咨询】2024休闲食品行业简析报告.pdf...