[TOC]
这里有一个创建变量并初始化它的例子:
~~~
var name = 'Bob';
~~~
变量存储引用。名为name的变量包含对字符串对象的引用,值为“Bob”。
name变量的类型被推断为String,但是您可以通过指定它来更改该类型。如果对象不限于单一类型,请按照[设计指导]原则指定对象 (Object)或动态(dynamic)类型。
~~~
dynamic name = 'Bob';
~~~
另一种方法是显式声明要推断的类型:
~~~
String name = 'Bob';
~~~
>注意:这个页面遵循了对本地变量使用var而不是类型注解的风格指南建议。
>
## 默认值
未初始化的变量的初始值为null。甚至具有数字类型的变量最初也是null,因为数字——就像dart中的其他东西一样——是对象。
~~~
int lineCount;
assert(lineCount == null);
~~~
>注意:在生产环境中,assert()调用被忽略。在开发环境中当assert(condition) 的condition条件不为真时抛出一个异常。详细信息请查看[ Assert]。
>
## Final 和 const修饰符
如果您从未打算更改一个变量,请使用final或const修饰他,而不是使用var或其他变量类型。最终变量只能设置一次;const变量是一个编译时常数。(Const变量是隐式最终变量。)最终的顶级或类变量在第一次使用时被初始化。
>注意:实例变量可以是final,但不能是const。[*实例变量定义在对象一级,它可以被类中的任何方法或者其他类中的方法访问,但是不能被静态方法访问。*]
>
这里有一个创建和设置final变量的例子:
~~~
final name = 'Bob'; // Without a type annotation
final String nickname = 'Bobby';
~~~
您无法更改final变量的值:
~~~
name = 'Alice'; // Error: a final variable can only be set once.
//这个是错误示例,在使用时final变量是不可以更改的
~~~
对于想要在编译时确定并且不再变的变量,使用const。如果const变量位于类级别,则将其标记为静态const。在声明该变量时,将该值设置为编译时常量,例如数字或字符串字面量、const变量或常量数字算术运算的结果:
~~~
const bar = 1000000; // Unit of pressure (dynes/cm2)
const double atm = 1.01325 * bar; // Standard atmosphere
~~~
const关键字不只是声明常量变量。您还可以使用它来创建常量值,以及声明创建常量值的构造函数。任何变量都可以赋一个常量值。
~~~
var foo = const [];
final bar = const [];
const baz = []; // Equivalent to `const []`
~~~
您可以从const声明的初始化表达式中省略const,如上面的baz。有关细节,请参见[不要多余的使用const]。
您可以更改一个非final的非const变量的值,即使它曾经有一个const值:
~~~
foo = [1, 2, 3]; // Was const []
~~~
你不能改变const变量的值:
~~~
baz = [42]; // Error: Constant variables can't be assigned a value.
~~~
有关使用const创建常量值的更多信息,请参见 [Lists], [Maps], 和 [Classes]。