核心: static 修饰 members , final 修饰 variables , const 修饰 value
static static 意味着成员是类变量,而不是实例变量。仅此而已,没有其他任何用图。static 修饰 成员(members)。
final final 意味着单次赋值:一个 final 修饰的 变量或 字段 必须 具有初始化赋值。一旦赋值,final 的变量就不能改变。 final 修饰 变量(variables)。
const const 的含义在 Dart 中有一些复杂和微妙。const 修饰 value。 你可以用它创建于集合,例如 const [1,2,3],也可以构建一个类的实例,例如 const Point(2,3)。const 意味着这些对象的所有状态都在编译期就确定了,另外这个对象将会被冻结并且完全不可改变。
Const 对象有一些有趣的属性和限制:
- 它们必须由编译期就能被计算出来的数据创建。一个 const 的对象不能使用运行时才能确定的值。1+2 是一个合法的 const
表达式,但是 new DateTime.now() 就是不合法的。 - 它们是深入的,传递性的不可改变。如果你有一个 final 的集合字段,集合里面的内容是可以改变的。如果你有一个 const
的集合对象,集合里面的一切都是 const 的,都是不能改变的。 - 它们是规范化的,这点有些像字符串:对于一个 const 的 value,无论这个 value
被创建或者使用多少次,都是相同的。举例如下:
getConst() => cosnt[1,2];
main(){
var a = getConst();
var b = getConst();
print(a===b);
}
结语
final: 第一:如果你在运行时才能获得的值,那么用 final 进行修饰。比如 http 请求结果,数据库请求结果。 第二:final 修饰的对象,只要这个对象的字段不是final或const。那么他们是可以再次被赋值的。
const: 第一:编译期就能确定的值,那么用 final修饰。 第二:如果你有一个 const 的对象,那么 const 对象里面的(字段)一切都是 const。不能再次进行赋值。
|