Dart中 static final const

本文深入探讨了Dart语言中的static、final与const关键字的使用与区别,详细解析了它们在变量、成员及对象创建中的作用,以及const对象的创建规则与特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://codingdict.com/blog/article/2018/12/13/619.html

main() {

//  "static" 表示成员在类本身上可用,而不是在类的实例上。
//           这就是它的意思,并没有用于其他地方。 static修饰成员。
//
//  "final" 表示单一赋值:final变量或字段【必须初始化】。
//          一旦赋值,就不能改变final变量的值。 final修饰变量。
//
//  "const" 的含义在Dart中有点复杂和微妙。 const修饰值,可以在创建集合时使用它,
//  		例如const [1,2,3] ,以及构造对象(代替new),比如const Point(2,3)。
//  		这里,const意味着对象的整个深度状态可以在编译时完全确定,
//			并且对象将被冻结并完全不可变。
//
//  const对象有几个有趣的属性和限制:
//  1.必须根据可在编译时计算的数据创建它们。 const对象无法访问运行时需要计算的任何内容。
//    1+2是一个合法的const表达式,但new DateTime.now()不是(合法的const表达式)。
//  2.它们是深层不能改变的。 如果你有包含集合的final字段,则该集合仍然可变。
//    如果你有一个const集合,那么它中的所有东西也必须是递归的const。
//  3.它们是规范化的。 这有点像字符串内联:
//    对于任何给定的const值,无论const表达式被计算多少次,都将创建并重用单个const对象。
//    也就是说:
//        getConst1() {
//          return const [1, 2];
//        }
//        //等价于
//        getConst2() => const [1, 2];
//
//      main() {
//        var a = getConst2();
//        var b = getConst2();
//        print(a === b); // true
//      }

  int Func() {
    // 代码
  }

  final int m1 = 60;
  final int m2 = Func(); // 正确
  const int n1 = 42;
//  const int n2 = Func(); // 错误
//  在上面的例子中,m2的值是不变的,但如果不把代码运行起来,你无法知道m2是多少。

  final name = 'Bob'; // 正确
//  name = 'Alice'; // 错误,final 变量只能赋值一次

//  const name1;  // 错误,const 变量是编译时常量,需要在声明时赋值进行初始化
//  final name1; // 错误,final变量需要在声明时赋值进行初始化
  const name2 = 'Alice'; // 正确

//  const name3 = name; // 错误,name 是个变量,不能赋给const
  final name4 = name2; // 正确,可以把const 常量赋给 final 变量

//  final names1 = const[name, 3, 4];  // 错误,name 是个变量,不能赋给const
  final names2 = const [name2, 'Allen', 'Brian'];

  const names3 = [
    'A',
    'B',
    'C'
  ]; // 正确。这里与参考 http://www.cndartlang.com/658.html 有点差别,经实测是正确的
  const names4 = const ['A', 'B', 'C']; // 正确。

  print(names3[1]);
  print(names4[1]);
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值