Dart 基础语法-dynamic&Object

5,418 阅读1分钟

6、dynamic&Object

dynamic: [daɪˈnæmɪk] 动态的;动力的;动力学的;有活力的

基础

在Dart里面,一切皆对象,而且这些对象的父类都是Object。 当没有明确类型的时候,编译的时候回根据值明确类型

var name1 = "abc";
Object name2 = "def";
dynamic name3 = "hij";

以上写法都没有问题,但是Dart不建议我们这么做。在实际开发过程中,我么么应该尽量为变量确定一个类型,这样可以提高安全性,加快运行速度。

如果不指定类型,debug模式下类型会是动态的。

使用dynamic时,则告诉编译器,我们不用做类型检测,并且知道自己在做什么。如果我们调用了一个不存在的方法时,回执行noSuchMethod()方法。 在默认情况下(Object里实现)它会抛出NoSuchMethodError

dynamic,var,object三者的区别

void main()//dynamic,var,object三者的区别
{
  //dynamic
  dynamic x = 'hello';//编译时不会揣测数据类型,但是运行时会推断
  print(x.runtimeType);//String
  print(x);
  //但是这样的坏处就是会让dart的语法检查失效,所以有可能会造成混乱而不报错
  //所以不要直接使用dynamic
  x = 123;
  print(x.runtimeType);//int,说明类型是可变的
  print(x);
 
  //var
  var a = 'hello';
  print(a.runtimeType);
  print(a);
  //a = 123;//会报错
  a = '123';
  print(a);
 
  //Object
  Object w = 1;
  print(w.runtimeType);
  print(w);
  //不能调用Object不存在的方法
  
}

dynamic与Object的最大的区别在于静态类型检查上