Flutter

Dart:修饰符 static final const

2018-08-13  本文已影响0人  jeffiano

阿里巴巴口碑Android开发内推
今天来说一下Dart语言中的这三个修饰符的异同。
static:用于修饰成员变量,这个变量是属于类的,而不是属于对象的,除此之外没有其他别的含义了,static修饰符的使用方式和Java类似。 static变量直到运行期被使用时才会实例化。
final:用于修饰变量,表示单赋值(single-assignment),使用final修饰的变量必须进行初始化,一旦被赋值之后,不能够再次被赋值,否则编译会报错。

const:含义稍显复杂。dart中const是用来修饰某个值的,可以通过它来创建集合:

var list =  const [1, 2, 3];

或者用来构造对象:

var point = const Point(2, 3);

这里const表示Point对象的状态完全可以在编译期间确定,并且完全是不可变的。
被const修饰的对象有些特殊的属性和限制:
1.必须依靠编译期间就能够计算出来的数据进行创建,包括两种情况:

const num = 1 + 2;

但是new DateTime.now() 不行。

这里的Student类中定义了一个const构造函数,一个类能够定义 const 构造函数的前提是成员变量必须都是用final或const修饰的。

2.const导致的不可变性是可传递的,如果你有一个final修饰的成员变量,这个成员变量包含了一个集合,那么这个集合仍然是可变的。如果包含的是const修饰的集合,那么集合内的所有东西是递归地不可变的。

运行结果:

3.相同的const变量不会在内存中重复创建,如果表达式被调用了多次,则重用之前创建好的常量,或者用代码表达这一特性:

getConst() => const [1, 2];
main() {
  var a = getConst();
  var b = getConst();
  identical(a, b); // =>true
}

其中identical用于检查两个引用是否指向同一个对象。

Flutter程序员公众号,关注Flutter相关话题~

上一篇下一篇

猜你喜欢

热点阅读