【Flutter】Dart 数据类型 ( var 数据类型 | Object 数据类型 )
Dart 语言中有 dynamic , var , Object , 3 3 3 种数据类型 ;
一、 var 数据类型
var 也是定义变量的关键字 , 使用 var 声明变量 , 也是 由系统根据该变量的 赋值 自动 推断该变量的数据类型 ; 该用法与 dynamic 关键字定义的变量类似 ;
代码示例 :
varDemo(){
// 声明 var 变量
var d = "CSDN";
// 打印 var 变量的运行时类型
print(d.runtimeType);
// 打印 var 变量值
print(d);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
运行结果 : d 变量的类型被自动推断为 String 类型 ;
String
CSDN
- 1
- 2
二、 var 数据类型不能被改变
var 与 dynamic 变量的区别是 , 一旦 var 类型的变量的动态数据类型被定义后 , 其数 据类型不能再进行修改 , 如果 var 类型变量被赋值字符串后 , 再次为其赋值 int 类型 , 此时编译时就会被报错 ,
三、 Object 类型
Object 是 所有对象的基类 , 其中定义了一些方法 , 定义 Object 类型的变量后 , 就可以调用该对象的 Object 方法 ;
为其赋值时 , 可以 赋值其子类的类型值 , 如字符串值 , 相当于 多态用法 ;
Object 类中定义的方法 :
class Object {
const Object();
external bool operator ==(other);
external int get hashCode;
external String toString();
@pragma("vm:entry-point")
external dynamic noSuchMethod(Invocation invocation);
external Type get runtimeType;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
代码示例 :
objectDemo(){
// 定义 Object 类型变量
Object d = "CSDN";
// 调用 Object 对象的方法
// 打印 var 变量的运行时类型
print(d.runtimeType);
// 打印 var 变量值
print(d);
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
运行结果 : 变量 d 的运行时类型是 String 类型 ;
String
CSDN
- 1
- 2
Object 变量与 dynamic 变量的区别是 , Object 数据类型是确定的 , 就是 Object 类型 , Object 类型变量不能调用 Object 类中不存在的方法 ;
四、 完整代码示例
完整代码示例 :
import 'package:flutter/material.dart';
class DartType extends StatefulWidget {
@override
_DartTypeState createState() => _DartTypeState();
}
class _DartTypeState extends State<DartType> {
@override
Widget build(BuildContext context) {
dynamicDemo();
varDemo();
objectDemo();
return Container();
}
dynamicDemo(){
dynamic d = "CSDN";
// 打印 dynamic 变量的运行时类型
print(d.runtimeType);
// 打印 dynamic 变量值
print(d);
// 调用 dynamic 变量的方法, 静态编译时无法检查其中的错误, 运行时会报错
//d.getName();
// 为 dynamic 变量赋值 int 数据
d = 666;
// 打印 dynamic 变量的运行时类型
print(d.runtimeType);
// 打印 dynamic 变量值
print(d);
}
varDemo(){
// 声明 var 变量
var d = "CSDN";
// 打印 var 变量的运行时类型
print(d.runtimeType);
// 打印 var 变量值
print(d);
// 将已经被自动推测为 String 类型的 d 变量赋值一个 int 类型值
// 此时就会在编译时报错
//d = 666;
}
objectDemo(){
// 定义 Object 类型变量
Object d = "CSDN";
// 调用 Object 对象的方法
// 打印 var 变量的运行时类型
print(d.runtimeType);
// 打印 var 变量值
print(d);
// 调用 Object 不存在的方法就会报错
//d.getName()
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
运行结果 :
String
CSDN
int
666
String
CSDN
String
CSDN
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
五、 相关资源
参考资料 :
- Dart 开发者官网 : https://api.dart.dev/
- Flutter 中文网 ( 非官方 , 翻译的很好 ) : https://flutterchina.club/ , http://flutter.axuer.com/docs/
- Flutter 官网 : https://flutter.dev/ ( 被墙 )
- 官方 GitHub 地址 : https://github.com/flutter
- Flutter 相关问题 : https://flutterchina.club/faq/ ( 入门阶段推荐看一遍 )
博客源码下载 :
-
GitHub 地址 : https://github.com/han1202012/flutter_app_hello ( 随博客进度一直更新 , 有可能没有本博客的源码 )
-
博客源码快照 : https://download.csdn.net/download/han1202012/15113321 ( 本篇博客的源码快照 , 可以找到本博客的源码 )
文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。
原文链接:hanshuliang.blog.csdn.net/article/details/113725130
- 点赞
- 收藏
- 关注作者
评论(0)