初始化列表和重定向构造函数
设置 final 并复用构造函数
初始化列表和重定向构造函数 是 CoddyKit 上的免费 Dart Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Dart Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Dart Academy 课程共包含 4 节课。
设置 final 字段
final 字段必须在构造方法体运行之前设置。初始化列表正好适合为它赋予唯一的值。
class Circle {
final double area;
Circle(double r) : area = 3.14 * r * r;
}初始化列表语法
在参数列表后添加冒号和以逗号分隔的赋值。这个初始化列表会在构造方法体之前运行。
Point(int x, int y) : x = x, y = y;在方法体之前运行
初始化赋值会先执行,然后才执行方法体。因此,在列表中设置的字段进入方法体时已经准备就绪。
class Box {
final int n;
Box(int v) : n = v {
print(n); // available
}
}计算派生值
使用初始化列表根据参数计算字段值,例如总数或标签,这样在任何代码接触对象之前就能完成计算。
class Rect {
final int area;
Rect(int w, int h) : area = w * h;
}多个初始化项
使用逗号分隔多个赋值。每个赋值都会在同一个初始化列表中设置不同的字段。
Point(int a, int b) : x = a, y = b;初始化列表中的 assert
您可以在列表中加入 assert,在开发期间检查输入值,并在对象创建前捕获错误值。
Circle(double r) : assert(r > 0), area = 3.14 * r * r;重定向构造方法
一个构造方法可以在冒号后使用 this 将工作交给另一个构造方法,从而让共用的初始化逻辑集中在一个位置。
class Point {
int x, y;
Point(this.x, this.y);
Point.zero() : this(0, 0);
}为什么要重定向
重定向可以避免重复字段赋值。命名构造方法只需调用主要构造方法,就能让逻辑保持DRY。
Point.origin() : this(0, 0);重定向构造方法的方法体保持为空
重定向构造方法没有方法体。它只通过 this(...) 将调用转发给目标构造方法,由目标构造方法完成实际工作。
class User {
String name;
User(this.name);
User.anon() : this("anon");
}执行顺序
请记住执行流程:初始化列表和任何重定向先运行,然后才运行方法体。在列表中设置 final 字段,在方法体中执行额外操作。
初始化列表与方法体
使用列表为字段赋值,尤其是 final 字段;使用方法体执行打印、超出 assert 范围的验证或调用方法等逻辑。
快速检查
快速检查初始化列表。
回顾:初始化与重定向
现在您可以使用初始化列表设置 final 字段并计算值,使用 assert 进行保护,还可以通过 this 将一个构造方法重定向到另一个构造方法。🔀
常见问题解答
「初始化列表和重定向构造函数」课时是免费的吗?
是的 — 「初始化列表和重定向构造函数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Dart Academy 课程的其余内容,请升级到 CoddyKit PRO。 Dart Academy 课程共包含 4 节课。
「初始化列表和重定向构造函数」这节课中我会学到什么?
设置 final 并复用构造函数 你通过在浏览器中直接运行的动手代码来练习 Dart Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Dart Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Dart Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。
「初始化列表和重定向构造函数」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Dart Academy 课中编写并运行代码吗?
能。每节 Dart Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- 默认构造函数和带参数构造函数
- 表达明确意图的命名构造函数
- 初始化列表和重定向构造函数
- 工厂构造函数和 const 构造函数