首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字

Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字

作者头像
LarryLan
发布2026-01-16 11:11:30
发布2026-01-16 11:11:30
890
举报

Flutter&Dart零基础入门教程(一)

...

Flutter 零基础入门(六):Map 键值对与简单数据模型》

Flutter 零基础入门(七):函数(Function)与代码封装

Flutter 零基础入门(八):Dart 类(Class)与对象(Object)

Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字

在上一篇中,我们已经学会了:

·使用 class 定义一个类

·使用构造函数创建对象

·使用对象访问属性和方法

例如:

代码语言:javascript
复制
User user = User('Tom', 18);

你可能会有这些疑问:

·构造函数到底是什么?

·为什么函数名和类名一样?

·this.name 中的 this 到底指什么?

·一个类能不能有多个构造方式?

这一篇,我们就把这些问题一次性讲清楚


一、什么是构造函数?

构造函数的作用只有一个:

在创建对象时,初始化对象的数据

当你写下这行代码:

代码语言:javascript
复制
User('Tom', 18);

实际上发生了两件事:

1.创建一个 User 对象

2.给这个对象的属性赋初始值

这个过程,就是由 构造函数 完成的。


二、最基础的构造函数

代码语言:javascript
复制
class User {
  String name;
  int age;
  User(String name, int age) {
    this.name = name;
    this.age = age;
  }
}

理解重点:

·构造函数 名字必须和类名一样

·没有返回值

·在对象创建时自动执行


三、this 关键字到底是什么?

在上面的代码中:

代码语言:javascript
复制
this.name = name;

这里出现了两个 name,它们并不一样:

·左边的 name → 对象自己的属性

·右边的 name → 构造函数的参数

📌 this 表示:

当前正在创建的这个对象

换句话说:

代码语言:javascript
复制
this.name

等价于:

“这个对象的 name 属性”


四、为什么要使用 this?

如果不使用 this,代码会变得不清晰甚至错误。

代码语言:javascript
复制
name = name; // ❌ 无意义,自己给自己赋值

所以当:

·属性名

·参数名

相同时,就必须使用 this 来区分。


五、构造函数的简写形式(推荐)

Dart 提供了一种非常常用、非常优雅的写法:

代码语言:javascript
复制
class User {
  String name;
  int age;
  User(this.name, this.age);
}

这行代码等价于:

代码语言:javascript
复制
User(String name, int age) {
  this.name = name;
  this.age = age;
}

📌 在 Flutter 项目中,90% 的构造函数都长这样


六、命名构造函数(Named Constructor)

有时候,一个类需要多种创建方式

例如:

·从默认数据创建

·从接口数据创建

·创建一个“空对象”

这时就需要 命名构造函数


1️⃣ 命名构造函数的定义方式

代码语言:javascript
复制
class User {
  String name;
  int age;
  User(this.name, this.age);
  User.guest() {
    name = 'Guest';
    age = 0;
  }
}

2️⃣ 使用命名构造函数

代码语言:javascript
复制
User user1 = User('Tom', 18);
User user2 = User.guest();

📌 特点:

·类名 + . + 构造函数名

·表达语义非常清晰


七、命名构造函数的常见用途

示例:从 Map 创建对象(非常重要)

代码语言:javascript
复制
class User {
  String name;
  int age;
  User(this.name, this.age);
  User.fromMap(Map<String, dynamic> map) {
    name = map['name'];
    age = map['age'];
  }
}

使用:

代码语言:javascript
复制
Map<String, dynamic> data = {
  'name': 'Lucy',
  'age': 20,
};
User user = User.fromMap(data);

📌 这是 后续 JSON / 接口数据解析的核心写法


八、构造函数在 Flutter 中的意义

在 Flutter 中:

·每一个 Widget 都有构造函数

·参数通过构造函数传入

·this.xxx 是最常见写法

例如(概念层面):

代码语言:javascript
复制
MyWidget({this.title});

📌 你现在学的内容,会在 Flutter UI 中被大量使用。


九、一个综合示例

代码语言:javascript
复制
class Product {
  String name;
  int price;

  Product(this.name, this.price);

  Product.free() {
    name = 'Free Product';
    price = 0;
  }
  
  void showInfo() {
    print('$name 的价格是 ¥$price');
  }
}

使用:

代码语言:javascript
复制
Product p1 = Product('iPhone', 5999);
Product p2 = Product.free();

p1.showInfo();
p2.showInfo();

十、总结

本篇你已经学会了:

·构造函数的作用

·this 关键字的真正含义

·构造函数的简写方式

·命名构造函数的使用场景

你已经正式掌握了:

Dart 面向对象编程的核心细节


🔜 下一篇预告

《Flutter 零基础入门(十):final、const 与不可变数据》

下一篇我们将学习:

·final 和 const 的区别

·编译时常量 vs 运行时常量

·为什么 Flutter 强烈推荐使用 const

·写出更高性能、更安全的代码

这是一个:

从“能用”走向“写得好”的关键主题

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-01-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Larry的Hub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Flutter&Dart零基础入门教程(一)
  • ...
  • Flutter 零基础入门(六):Map 键值对与简单数据模型》
  • Flutter 零基础入门(七):函数(Function)与代码封装
  • Flutter 零基础入门(八):Dart 类(Class)与对象(Object)
  • Flutter 零基础入门(九):构造函数、命名构造函数与 this 关键字
    • 示例:从 Map 创建对象(非常重要)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档