重载构造函数 初始化列表

这篇博客深入探讨了C++中的构造函数,特别是重载构造函数和初始化列表的使用。通过示例代码,解释了如何通过初始化列表有效地设置成员变量的初始值,以及它们在对象创建过程中的作用。此外,还强调了使用初始化列表的重要性,以避免不必要的数据拷贝和提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

重载构造函数 初始化列表

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

构造函数名(参数表):成员1(初始值),成员2(初始值),…,{

}

介于构造函数参数表后面的“:”与函数体{}之间的内容就是成员的初始化列表,其含义是将括号中的初始值赋值给概括好前面的成员

### Java 构造函数初始化列表的用法 在 Java 中,构造函数的主要作用是用来初始化对象的状态。虽然 Java 不像 C++ 那样显式支持初始化列表的概念,但在某些场景下可以通过字段声明时赋初值或者在构造器内部完成类似的初始化操作。 #### 字段初始化构造函数的关系 当定义类的时候,可以为类中的实例变量提供默认值。这种初始化方式类似于其他语言中的初始化列表[^1]。例如: ```java public class Person { private String name = "Unknown"; // 默认值 private int age; public Person(int age) { this.age = age; } @Override public String toString() { return "Person{name='" + name + "', age=" + age + "}"; } } ``` 在这个例子中,`name` 的默认值是在字段声明处指定的,而 `age` 则通过构造函数传入并设置其值[^3]。 #### 使用构造函数初始化多个参数的情况 如果需要传递多个参数给构造函数来进行更复杂的初始化工作,则可以通过重载不同的构造函数实现这一目标。下面是一个带有两个不同签名构造函数的例子: ```java public class Student { private final int id; // 学生ID,不可变 private String name; // 姓名 private double gpa; // 平均成绩 // 无参构造函数,默认值设定 public Student(){ this(0,"NoName",0.0); // 调用另一个有三个参数的构造函数 } // 完整参数化的构造函数 public Student(int id,String name,double gpa){ this.id=id; this.name=name; this.gpa=gpa; } @Override public String toString(){ return "Student{id="+id+", name='"+name+"', GPA="+gpa+'}'; } } ``` 上述代码展示了如何利用一个构造函数去调用同一个类里的其它构造函数 (称为委托构造),从而减少重复代码,并且实现了所谓的“伪初始化列表”的功能[^5]。 #### 关于静态变量的注意事项 需要注意的是,在 Java 中,构造函数仅适用于实例化非静态成员(即属于特定对象而非整个类)。对于静态成员来说,它们会在第一次加载类到内存期间由 JVM 自动分配空间并赋予零或空字符串之类的初始值;因此通常不需要也不应该尝试通过任何类型的构造函数来改变这些值[^4]。 ### 总结 尽管严格意义上讲Java并不具备C++那样的构造函数初始化列表特性,但是我们仍然能够借助合理的编程技巧达到相似的效果——比如直接在属性定义阶段给予合理缺省值或是采用多态性的构造方法设计思路等等。这样既提高了程序可读性和维护便利度,又遵循了面向对象的设计原则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值