一、Dart 入口方法介绍 Dart打印 Dart注释 Dart变量 常量申明 变量命名规则
1.变量声明,用var或者通过类型来声明
方法一:var str='hello world'; 通过var声明
方法二:String str='hello world'; 通过类型声明
2.dart变量区分大小写
var age=20;
var Age=30;//age和Age输出的是不同的结果
3.变量重新赋值
var str=‘hello’;
str=‘hi’;
打印str,输出结果显示hi
4.常量不可以修改,不能重新赋值
5.定义常量用final和const,区别如下图
二、Dart的数据类型详解 int double String bool List Maps
1.常用数据类型
2.定义数据类型
var str1 = 'hello world';
String str2 = 'ni hao'; //数据类型开头,后面填写的数据必须和定义的数据类型一致
3.字符串的拼接
String str1 = 'hello';
String str2 = 'dart';
print('$str1 $str2'); //方式一
print(str1 + str2); //方式二
4.int和double区别,double既可以是整型也可以是浮点型,int必须是整型
5.bool值:true/false
var flag = true;
if (flag) {
print('真');//分号必须加
} else {
print('假');
}
6.list的两种定义方式
var list1 = ['aaa', 'bbb', 'ccc'];//方法一
print(list1);
print(list1.length); //打印list1长度
print(list1[0]);//打印下标为list1下标为0的值
List list2 = new List();//方法二
list2.add('111');
list2.add('222');
list2.add('333');
print(list2);
List list3 = new List();//指定list3的数据类型只能为String
7.map的两种定义方式
var person1 = { //定义map方法一
'name': 'jack', //数据必须加''
'age': 20,
'sex': '男',
}; //结束之后必须加分号
print(person1);//打印person1的数据
print(person1['name']);//打印person1的名字
Map person2 = new Map();//定义map方法二
person2['name'] = 'hellen';
person2['age'] = 22;
person2['sex'] = '男';
8.is关键词判断类型
var str = '1234';
if (str is String) {
print('str is String类型'); //判断语句之后必须加分号
} else {
print('str is int类型');
}
三、 Dart运算符 条件表达式 Dart类型转换
1.算术运算符
int a = 13;
int b = 5;
print(a + b);
print(a - b);
print(a * b);
print(a / b);
print(a % b); //取余
print(a ~/ b); //取整
2.逻辑运算符
print(a == b); //判断是否相等
print(a != b); //判断是否不等
print(a > b); //判断是否大于
print(a < b); //判断是否小于
print(a >= b); //判断是否大于等于
print(a <= b); //判断是否小于等于
3.关系运算符
bool flag = true;
print(!flag);//!取反
var a = true;
var b = false;
print(a && b);//&&并且:全部为tru的话值为true 否则值为false
bool a = false;
bool b = true;
print(a || b);//||或者:全部为false的话值为false 否则值为true
4.赋值运算符
int a = 10;
int b = 20;
int c = a + b;//从右向左
print(c);
int b = 10;
b ??= 23;//表示如果b为空的话把23赋给b
print(b);
复合赋值运算符
5.条件表达式
if...else..
bool flag = true;
if (flag) {
print('true');
} else {
print('false');
}
switch...case 判断固定支时候比if...else效率高
var sex = '男';
switch (sex) {
case '男':
print('性别是男');
break;//每个case结束之后用break结束
case '女':
print('性别是女');
break;
default://最后结束一定要以以default结尾
print('传入参数错误');
break;
}
三目运算符
bool flag = true;
String c = flag ? '我是true' : '我是false';//如果flag等于true,把我是true赋值给c,如果flag等于false,把我是false赋值给c
print(c);
??运算符
var a;
var b = a ?? 10; //如果a为空,把10赋值给b
print(b);
6.类型转换,Number与String类型之间的转换,Number转换String用toString(),String转换Number用int.parse()或者double.parse()
String转换Number如下:
String str = '123';
var myNum = int.parse(str);
if (myNum is int) {
print('true');
} else {
print('false');
}
Number转换String如下:
var myNum = 12;
var str = myNum.toString();
print(str is String);
7.其他类型转换成Booleans类型
var str = '';
if (str.isEmpty) {
print('str空');
} else {
print('str不为空');
}
四、Dart 循环语句 for while do...while break continue 多维列表循环
1.for循环
for (var i = 1; i < 100; i++) {
print(i);
}
//第一步,声明变量int i=1
//第二步,判断i<=100
//第三步,print(i)
//第四步,i++
//第五步 从第二步再来,直到判断为false
数组打印
List list = [
{'title': '新闻1111'},
{'title': '新闻2222'},
{'title': '新闻3333'}
];
for (var i = 0; i < list.length; i++) { //数组长度用list.length
print(list[i]['title']);//打印标题,【‘title’】获取标题
}
1+2+3+....n;
var sum = 0;
for (var i = 1; i <= n; i++) {
sum += i;
}
print(sum);
二维数组打印,嵌套循环
2.while和do...while
while例子:
int i = 1;
while (i <= 10) {
//先判断然后再执行
print(i);
i++;//一定要加条件,让循环结束,不然容易造成死循环
}
do...while例子:
int i = 1;
do {
print(i);//先执行,后判断
} while (i > 1);
3.break和continue
continue例子
break例子
五、Dart 集合类型List Set Map详解 以及循环语句 forEach map where any every
1.List里的常见属性和方法
属性:
方法:
add(),addAll(),remove(),removaAt(),indexOf(),fillRange(),insert(),insertAll(),join(),split()等
fillRange()根据数据位置修改数据
insert()和insertAll()
join()数组转化成字符串
split()字符串类型转换成数组
2.set是没有顺序且不能重复的集合,所以不能通过索引去获取数值
常用方法toList(),addAll()
3.映射(Maps)是无序的键值对
常用属性:keys,values,isEmpty,isNotEmpty
常用方法:remove(),addAll(),containsValue
containsValue查看映射内的值,返回true或false
4.常用循环数据方法:forEach,map,where,any,every
forEach()
map主要用于修改集合里的数据
where()循环遍历数据,满足条件的,给返回
any()只要集合有一个满足条件,返回true
every()每个满足条件返回true,否则返回false
补充:map的遍历方法
六、Dart中的函数 函数的定义 可选参数 默认参数 命名参数 箭头函数 匿名函数 闭包等
1.方法的定义,作用域,调用方法
方法传参
形参和实参
可选参数
默认参数
命名参数
把方法当做参数的方法
2.箭头函数
3.一个方法调用另外一个方法
4.匿名方法
5.闭包:方法里面嵌套一个方法并且返回这个方法
特点:
例子:
七、Dart中的对象 类 类的创建 构造函数 命名构造函数 类模块化 私有属性 私有方法 get set
1.类的概念:一个类通常有属性和方法组成
2.创建类和使用类
3.类里面的构造函数:程序运行起来的时候自动去触发这个方法,默认构造函数名称和类名称一样
4.命名构造函数
5.类单独抽离成一个模块
步骤:1.把需要抽离的类单独编辑在一个dart文件中;2.新建文件夹,把单独抽离的类的dart文件放到这个文件夹下;3.在需要引用的dart文件中引入抽离类的文件(方法:import‘文件路径’);
6.类的私有方法和私有属性
方法:在类或者属性前面加入下划线且把这个类单独抽离到一个文件当中才可以让方法和属性成为私有的;
八、Dart中的类 静态成员 操作符 类的继承
1.类的静态成员和静态方法,在属性或方法前加static
注:静态方法不能访问非静态成员,非静态方法可以访问静态成员
非静态方法访问静态属性和非静态属性:访问非静态属性用this.属性
非静态方法调用静态方法:直接输入方法;
2.类的对象操作符:?条件运算符,as类型转换,is类型判断,..级联操作
3.类的继承:构造函数没办法实现继承,需要子类自己创建一个构造函数
子类调用父类的方法
子类新增属性
4.子类里面覆写父类的方法:直接把父类方法写在子类里面,调用该方法的时候会自动调用子类覆写的方法,建议在覆写方法上方加上@override
八、 Dart中的抽象类 多态 以及接口
1.抽象类:抽象类的子类必须要继承父类
2.多态:父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现
3.接口:建议使用抽象类定义接口,通过implements关键词实现接口
实现mysql的方法:
实现的时候建议把class Db这个类单独抽离出去,实现的时候直接引用import‘Db.dart这个文件’
4.extends抽象类和implements的区别:
a.如果要覆用抽象类里面的方法,并且要用抽象方法约束子类的话,我们就用extends继承抽象类;
b.如果只是把抽象类当做标准的话我们就用implements实现抽象类;
九、Dart中一个类实现多个接口 以及Dart中的Mixins
1.一个类实现多个接口
2.mixins:在类中混入其他功能,在dart中可以使用mixins实现类似多继承的功能
dart2.x中使用mixins的条件:
a.作为mixins的类只能继承自Object,不能继承其他类;
b.作为mixins的类不能有构造函数;
c.一个类可以mixins多个mixins类;
d.mixins绝不是继承,也不是接口,而是一种全新的特性;
十、Dart中的泛型 泛型方法 泛型类 泛型接口
1.泛型类:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
2.dart中的泛型接口:实现数据缓存的功能:有文件缓存、和内存缓存。内存缓存和文件缓存按照接口约束实现。
a.定义一个泛型接口约束实现它的子类必须有getByKey(key)和setByKey(key,value);
b.要求setByKey的时候的value的类型和实例化子类的时候指定的类型一致;
泛型接口作用:解决代码重用的问题,还会对不特定类型的数据进行校验
网友评论