1、指定声明变量
比如声明 String 类型String name="jack";也可以用 var name="jack"//自动类型推断为String类型;
String name="jack";
var name="jack";
一旦明确声明类型,则不能改变变量类型,如下
var name="jack";
name=2;//编译器报错
//提示的错误内容
A value of type 'int' can't be assigned to a variable of type 'String'.
Try changing the type of the variable, or casting the right-hand type to 'String'.
2、未指定声明变量
dynamic :在Dart语言中,dynamic可以存储任意类型。当一个变量被声明为dynamic后,编译器则会关闭对此变量的类型检查
dynamic name="jack";
name=2;//编译运行正常
对变量的操作都需要我们自己去判断其正确性,尤其是像后台接口返回的字段属性值要明确,不然其安全隐患比较大的。
还有就是声明变量要进行初始化操作,因为Dart中所有对象的默认值都为null,包括数字 int double
String name;
print(name);//The non-nullable local variable 'name' must be assigned before it can be used.
所以未赋值的话连编译器都不通过。当然可以通过late延迟属性加载实现声明的时候不用赋值,用到的时候再赋值,比如
late var name;
name="jack";
print(name);
获取用var 和dynamic修饰
dynamic name;
var age;
print(age);//打印为null
print(name);//打印为null
3、const 和 final
1、const 修饰变量时,必须赋值进行初始化操作
const String name;
name="jack;
以上代码则会编译不通过,正确应该是 const String name="jack";
2、const 修饰变量时,可以忽略声明的变量类型
比如上面的 const String name="jack";可以修改为 const name="jack";
3、const 修饰变量后,其值不能改变
比如上面的 const String name="jack";
不能修改为 name="Bob";
4、变量不可以同时用var和const修饰
ps: const var name="jack";// 报Members can't be declared to be both 'var' and 'const'.错误
5、const 必须在编译时就赋初始值,而final可在运行时赋初始值,即const 是编译时常量,在编译的时候就初始化了,但是 final 变量是运行时才初始化。
void finalTest(){
final String a;
a="jack";
print(a);
}
void constTest(){
const String a;// 编译报错,The constant 'a' must be initialized.
const String b="jack";
print(b);
}
6、const 修饰类中的变量,则必须加上 static 关键字
class Test{
static const String name="jack";
void getString(){
const String name2="jack";
}
}
final 只可用来修饰变量,
const 关键字即可修饰变量也可用来修饰 常量构造函数
常量构造函数需以const关键字修饰
const构造函数必须用于成员变量都是final的类
构建常量实例必须使用定义的常量构造函数
如果实例化时不加const修饰符,即使调用的是常量构造函数,实例化的对象也不是常量实例
class Test{
final String name;
const Test(this.name);
}