0Pricing
Dart Academy · 课时

初始化列表和重定向构造函数

设置 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 默认构造函数和带参数构造函数
  2. 表达明确意图的命名构造函数
  3. 初始化列表和重定向构造函数
  4. 工厂构造函数和 const 构造函数
← 返回 Dart Academy