Flutter/Dart final与const总结

final属于单赋值,使用final修饰的变量必须进行初始化,一旦被赋值以后,不能被再次赋值。

const修饰的变量它会在编译器以至于应用整个生命周期内都是不可变的常量,在内存中也只会创建一次,之后的每次调用都会复用第一次创建的对象。

使用场景:
Widget中创建的各种属性都是用final修饰的,Widget表示一帧, 赋值完成后是不会再变的。
而const可以这样来使用:

  1. 创建集合:
var list = const[1,2,3];

2.构造对象

var point = const Point(4,5);

3.通过基本运算得到常量

const num = 1+2;

但是Datetime除外

const time = DateTime.now();//这样会报错

4.定义常量实体类

class Student {
  final String name;
  const Student(String name) : this.name = name;
}
======
main(){
  var jim = const Student("Jim");
}

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

5.const导致的不可变特性是可以传递的。如果又一个final修饰的成员变量,这个成员变量包含了一个集合,那么这个集合仍然是可变的, 但是如果包含的是const修饰的集合,那么集合内所有东西都是递归不可变的。
e.g.

final list0 = [1,2,3];
list0[0] = 4;
print(list0.toString());//打印[4,2,3]
======
var list1 = const[1,2,3];
list1[0] = 4;//这里会报错

扩展:static修饰符也能用来修饰变量, 被它修饰的成员变量,方法是属于类级别的, 并不属于对象。static变量直到运行期使用时才会进行实例化。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,873评论 2 9
  • 、6一、基本知识 1.JDK和JRE的区别 答:JDK是java语言开发工具包,包含JRE和开发工具(javac....
    梦游的沙师弟阅读 1,231评论 0 4
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,148评论 1 32
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 2,703评论 0 11
  • 前言:最近感冒的不太想去面试,在家就对Java se的基础做了一些小总结 1.JDK和JRE的区别 一 基础知识 ...
    AntCode阅读 1,142评论 0 1