dart中的var、dynamic、const、final

本文详细介绍了Dart语言中变量与常量的声明方式,包括var与dynamic的区别,以及final与const的使用规则。同时,提供了丰富的代码示例,帮助读者理解不同数据类型的使用场景。

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

声明变量的方式:

var 	 : 【编译期】确定【变量类型】
dynamic	 : 【运行期】确定【变量类型】
bool 
int 
double
String 
List
Map

注意:
1.所有未初始化的变量的初始值为null。这是因为Dart将所有值都视为对象
2.var实际上是编译期抛给我们的“语法糖”,一旦被编译,
编译期会自动匹配var 变量的实际类型,并用实际类型来替换该变量的申明,
这看上去就好像我们在编码的时候是用实际类型进行申明的。
而dynamic被编译后,实际是一个 object类型,
只不过编译器会对dynamic类型进行特殊处理,
让它在编译期间不进行任何的类型检查,而是将类型检查放到了运行期。

main() {
  var a = 10;
  print(a);//10
//  a = "dart"; //写法错误

  dynamic b = 20;
  print(b); //20
  b = "JavaScript"; //正确
  print(b); //JavaScript

  var list = new List<dynamic>();
  list.add(1);
  list.add("hello");
  print(list);//[1, hello]

}

声明常量的方式:

final	 :【运行期】确定【常量值】
const	 :【编译期】确定【常量值】

注意:
1.final必须初始化,只能赋值一次,且不能修改值,赋值可以是常量也可以是变量。
const必须初始化,只能赋值一次,且不能修改值,赋值必须是常量。
2.const必须根据可在编译时计算的数据创建它们。
const对象无法访问运行时需要计算的任何内容。
1+2是一个合法的const表达式,但new DateTime.now()不是(合法的const表达式)
3.使用const关键字声明的变量是隐式final的。
可以把const 常量赋给 final 变量,反过来不可以。
4.final和const可以与变量的数据类型一起使用,也可以与 var 关键字一起使用。

Dart编程数据类型示例:

main() {
  // numbers
  var a = 0;
  int b = 1;
  double c = 0.1;

  // strings
  var s1 = 'hello';
  String s2 = "world";

  // booleans
  var real = true;
  bool isReal = false;

  // lists
  var arr = [1, 2, 3, 4, 5];
  List<String> arr2 = ['hello', 'world', "123", "456"];
  List<dynamic> arr3 = [1, true, 'haha', 1.0];

  // maps
  var map = new Map();
  map['name'] = 'zhangsan';
  map['age'] = 10;
  Map m = new Map();
  m['a'] = 'a';

  //runes,Dart 中 使用runes 来获取UTF-32字符集的字符。
  //String的 codeUnitAt and codeUnit属性可以获取UTF-16字符集的字符
  var clapping = '\u{1f44f}';
  print(clapping); // 打印的是拍手emoji的表情

  // symbols
  print(#s == new Symbol("s")); // true
}
一、 单选题 1、Dart语言是由哪个公司开发的?( ) A、 Google B、 Microsoft C、 Apple D、 Facebook 2、Dart是以下哪种类型的编程语言?( ) A、 静态类型语言 B、 动态类型语言 C、 脚本语言 D、 函数式语言 3、Dart中,以下哪个关键字用于定义类?( ) A、 class B、 function C、 interface D、 struct 4、Dart中,以下哪个是合法的变量名?( ) A、 123var B、 _privateVar C、 var! D、 class 5、Dart中,以下哪个是正确的字符串拼接方式?( ) A、 "Hello" + "World" B、 "Hello" . "World" C、 "Hello" & "World" D、 "Hello" ~ "World" 6、Dart中,finalconst的区别是?( ) A、 final可以在运行时初始化,const必须在编译时初始化 B、 const可以在运行时初始化,final必须在编译时初始化 C、 两者没有区别 D、 final用于变量,const用于类 7、Dart中,以下哪个是正确的列表声明方式? A、 List list = [1, 2, 3]; B、 list List = [1, 2, 3]; C、 var list = (1, 2, 3); D、 List list = {1, 2, 3}; 8、Dart中,以下哪个是正确的字典声明方式?( ) A、 Map map = {'key': 'value'}; B、 map Map = {'key': 'value'}; C、 var map = ['key': 'value']; D、 Map map = {'key', 'value'}; 9、Dart中,以下哪个是正确的函数声明方式?( ) A、 function add(a, b) { return a + b; } B、 add(a, b) => a + b; C、 var add = (a, b) { return a + b; }; D、 以上都是 10、Dart中,以下哪个是正确的异步函数声明方式?( ) A、 async function fetchData() {} B、 Future<void> fetchData() async {} C、 void fetchData() => Future; D、 fetchData() async { return Future; } 二、 判断题 1、Dart 中,null 是一个对象。 2、Dart 中,abstract 类不能有实现方法。 3、Dart 中,switch 语句只能用于整数类型。 4、Dart中,List和Map是动态类型集合。 5、Dart中,async函数必须返回Future类型。 三、 填空题 1、Dart语言诞生于__________年,官网是__________ ,Dart语言的后缀名是__________。 2、Number类型转换成String类型用__________,String类型转成Number类型用__________。 3、如果只需要导入库的一部分,有两种模式:只导入需要的部分,使用__________关键字,隐藏不需要的部分,使用__________关键字。 四、 简答题 1、简述Dart中的类的继承? 2、编写一个泛型类 Box,用于存储任意类型的值,包含以下功能: 私有属性 _value 构造函数初始化_value 公有方法getValue()获取_value值 公有方法setValue()设置_value值 3、设计一个 Dart 类 Person,包含以下功能: 私有属性 _name 和 _age 构造函数初始化 _name 和 _age 公开方法 greet() 返回字符串 "Hello, my name is [name] and I'm [age] years old." 添加 toString() 方法打印对象信息
最新发布
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值