final 和final 是应用于变量的关键字。
Dart 和 Flutter提供了使用final和const关键字分配给变量的常量值。
const变量在编译时知道其值,final变量在运行时知道其值。
让我们来看看这个例子的用法。
const date="2021-01-01"// 编译时常量 final date=CalculateDateFunction();// 运行时常量
让我们来看看更多的例子的比较
编译时常量与运行时常量
const 和final 值都只分配一次。编译时常量是编译时的常量值
让我们看一个compile-time constants
void main() {
const number1;
number1=45;
print(number1);
}
上面的程序抛出了编译时错误,如下所示错误:The const variable ‘number1’ must be initialized.
常量 number1; ^^^^^^^Error: Can’t assign to the const variable ‘number1’. number1=45;
让我们看一个运行时常量的例子,也叫final 变量。用final 关键字声明一个变量。由于45的值是在运行时分配的,所以编译起来很顺利。
下面的程序编译和运行,输出45。
void main() {
final number1;
number1=45;
print(number1); //45
}
以上 从这些程序中,区别在于
const是编译时常量, 是运行时常量。final- 常量值只在编译时初始化,运行时分配是不可能的。
- 两者都是一次性赋值的
final变量和const变量都不能为变量重新赋值
一旦变量被声明并初始化了它们的值,你可以用新的值重新分配这些变量。
重新赋值常量变量
void main() {
const number1 = 123;
print(number1);
number1 = 45;
}
抛出错误Constant variables can’t be assigned a value. Reassigning final variable
void main() {
final number1 = 123;
print(number1);
number1 = 45;
}
抛出错误The final variable ‘number1’ can only be set once.
从上面的程序来看,一旦给变量赋值,这两种类型都是不能重新赋值的。
类级成员常量
让我们看看如何声明类级成员常量。在类中声明的变量被称为成员变量。
类成员常量:
class Student {
const id = 5;
}
它抛出了错误。只有静态字段可以被声明为常量。
类级常量总是用static 关键字来声明。
下面是有效的成员变量常量
class Student {
static const id = 5;
}
类成员常量必须在声明时被初始化。
class Student {
static const id;
}
上面的程序出现了错误。常量变量'id'必须被初始化。
常量变量必须在同一行中初始化。
类成员常量final:最终成员变量用final 关键字声明。
有效的类最终变量例子
class Employee {
final id = 15;
}
类的最终成员变量应该在同一行中初始化。
下面的程序抛出了一个错误。最终字段'id'没有被初始化。
class Employee {
final id ;
}
类中有效的最终变量
class Employee {
final id=4 ;
}
Dart和Flutter中final变量和const变量的区别
以下是dart和flutter中final和const变量声明的比较
| 最终变量 | 常量变量 |
|---|---|
| 应用于变量 | 变量 |
| 只赋值一次 | 只分配一次值 |
| 运行时常量 | 编译时常量 |
| 类别变量常量 | |
| 用常量声明 | 常量必须与 |
| static关键字来使其成为常量 | |
| 类常量在同一行中被初始化为值 | 类常量在同一行中被初始化为数值 |