Java是面向对象的一种语言,在Java对象生成的过程,涉及子类和父类的加载、静态成员变量的初始化、子类和父类对象的初始化等过程,其具体过程通过下述代码来说明。

该段代码的执行结果为:

c1: static Constructor C
c3: normal Constructor C
a1: static Constructor A
b1: static Constructor B
a2: normal Constructor A
a3: normal Constructor A
Constructor Base
b2: normal Constructor B
b3: normal Constructor B
Constructor Derived
end

对上述执行结果进行分析,其生成过程为:
1)程序执行时,首先加载main函数所在的类Test,由于Test类包含静态成员变量c1,因此对该变量进行初始化,调用其构造函数。
2)由于c2是Test类的对象成员变量,且此处并没有初始化Test类对象,因此不需要初始化c2。
3)执行main函数。
4) main函数声明且初始化变量c3,因此调用其构造函数。
5)main函数声明且初始化变量derived,此过程可具体划分为以下步骤:
a) 加载Derived类,由于其继承自Base类,因此还需加载Base类。
b) 类加载完成后,由父类至子类,先后完成其中静态成员变量的初始化,因此先后调用a1,b1的构造函数。
c) 静态成员变量初始化后,由父类至子类,先后完成类对象的初始化。在类对象的初始化过程中,首先初始化对象成员变量,再调用构造函数。因此,在Base类,首先调用a2的构造函数,再调用Base的构造函数,在构造函数中,调用a3的构造函数;而在Derived类,首先调用b2的构造函数,再调用Derived的构造函数,在构造函数中,调用b3的构造函数。
6) 综上,完成了整个对象的初始化生成过程和程序运行。

参考:《Java编程思想》

基于WebSocket实现微信小程序的消息推送

微信小程序支持通过基于WebSocket进行消息推送,提供了相应的API,例如创建连接示例代码: JavaScript wx.connectSocket({ ...

阅读全文

基于nginx-sticky-module-ng实现会话保持(Sticky Sessions)

对服务进行集群部署,前端进行负载均衡时,需要实现会话保持,对于同一会话的多个请求,通过集群中的一个节点来提供服务。系统的部署结构如图所示,通过Resin...

阅读全文

ActiveMQ基于Zookeeper和LevelDB实现Master/Slave

ActiveMQ的Master/Slave目前支持三种实现方式: 1)Shared File System Master Slave; 2)JDBC Master Slave; 3)Replicated LevelDB Store。 对于第三种方...

阅读全文