1、var关键字
Dart语言中var关键字可以接受任何类型的变量,但是一旦赋值,类型推断就会确定这个变量的类型 ,由于Dart是个强类型语言,不能在以后的赋值中变更其类型。
var age = 10;
age = "10"; //Error!
print(age);
2、dynamic关键字
dynamic关键字顾名思义,动态类型,相比var关键字更加灵活多变,赋值不限制类型,且在后续赋值中可以改变类型。
要小心使用这个关键字,如果调用了不存在的方法或者变量,则无法在编译期报错,而会在运行期报错。
dynamic age = 10;
print(age);
print(age.runtimeType);
age = "10";
print(age);
print(age.runtimeType);
输出:
10
int
10
String
dynamic age = "10";
print(age);
print(age.length);
print(age.runtimeType);
print("======");
age = 10;
print(age);
print(age.length);
print(age.runtimeType);
输出:
10
2
String
======
10
Unhandled exception:
NoSuchMethodError: Class 'int' has no instance getter 'length'.
Receiver: 10
Tried calling: length
3、Object关键字
不同于dynamic关键字,Object其实是所有类的基类,这一点雷同于Java,Object类型声明的变量只能调用以Object作为父类的方法。其遵循里氏代换原则。