成员对象的构造函数,会优先于类的构造函数执行

对于派生类的构造 函数,在定义对象时构造函数的执行顺序为:


1:基类的构造函数

2:成员对象的构造函数
3:派生类本身的构造函数 

public class IoTest {
	
	public static void main(String[] args) throws IOException {
		
		
		new Son();
	}
	
	
	
}

class Sup{
	public Sup(){
		System.out.println("Sup构造函数");
	}
}

class Son extends Sup{
	
	//成员对象的构造函数,会优先于类的构造函数执行
	private AA aa = new AA();
	
	public Son(){
		System.out.println("Son构造函数");
	}
}

class AA{
	public AA(){
		System.out.println("AA构造函数");
	}
}

结果:

### 对象成员变量或方法在构造函数中的初始化与使用 在面向对象编程中,构造函数用于创建的实例时初始化对象的状态。构造函数可以包含初始化列表或直接在函数体内进行初始化操作。以下是关于对象成员变量方法在构造函数中的初始化与使用的详细说明: #### 成员变量的初始化 成员变量可以在定义时直接赋值[^3],也可以通过构造函数的初始化列表进行初始化[^1]。初始化列表是一种高效的初始化方式,尤其适用于引用型、`const`修饰的变量以及自定义型的成员变量[^2]。 - **初始化列表**:在C++中,初始化列表优先构造函数执行,并且按照成员变量声明的顺序从左到右依次初始化[^1]。 - **直接赋值**:对于内置型的成员变量,可以直接在构造函数体内赋值[^3]。然而,这种方式可能不如初始化列表高效,因为某些型的对象可能需要额外的构造析构操作。 以下是一个C++代码示例,展示如何通过初始化列表初始化成员变量: ```cpp class Box { public: int length; int width; int height; // 构造函数使用初始化列表 Box(int l, int w, int h) : length(l), width(w), height(h) {} }; int main() { Box box(10, 20, 30); return 0; } ``` #### 静态成员变量的初始化 静态成员变量属于整个,而不是某个特定的对象[^4]。它们通常在外部进行初始化,或者在某些语言(如Java)中通过静态代码块完成初始化[^4]。由于静态成员变量不依赖于对象实例,因此不能在构造函数中初始化。 以下是一个Java代码示例,展示静态成员变量的初始化: ```java class Example { static int staticVariable; static { staticVariable = 10; // 静态代码块初始化 } public Example() { // 构造函数中无法直接初始化静态变量 } } public class Main { public static void main(String[] args) { System.out.println(Example.staticVariable); // 输出10 } } ``` #### 成员方法的调用 在构造函数中可以直接调用成员方法。需要注意的是,如果成员方法是非静态的,则必须确保该方法不会依赖未初始化的成员变量。此外,在构造函数中调用虚函数时,可能会导致未定义行为,因为在基构造函数执行期间,派生的虚函数表尚未完全初始化。 以下是一个C#代码示例,展示在构造函数中调用成员方法: ```csharp class Program { private int value; public Program() { Initialize(); // 在构造函数中调用成员方法 } private void Initialize() { value = 42; } static void Main(string[] args) { Program program = new Program(); } } ``` ### 总结 - 初始化列表是初始化成员变量的一种高效方式,尤其适用于引用型、`const`修饰的变量以及自定义型的成员变量。 - 静态成员变量不属于任何特定对象,因此不能在构造函数中初始化。 - 在构造函数中可以调用成员方法,但需注意方法依赖的成员变量是否已正确初始化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值