一、属性
1、普通属性定义
var:任意类型,根据初始赋的值进行类型推断
int:整型
double:浮点型
String:字符型
bool:布尔型
const:常量,值不可为对象
final:常量,值可以是对象
DateTime:时间类型
List:数组类型
2、对象属性定义
object:
void main(){
// maps 类型
var obj ={ // key 要带引号
"name":'张三',
"age":20
};
print(obj["name"]);
var p = new Map();
p["name"]='ahahaha';
p['arr'] = ["da",22];
print(p);
}
array:
扫描二维码关注公众号,回复:
14668097 查看本文章
void main(){
var arr = <String>["aa","sss"]; // 只能存储 String 类型的数据
var arr2 = List.filled(2, ""); // 指定长度
print(arr3.length);
var arr3 = List<String>.filled(2, ""); // 指定类型 如果不加<string> 自动也会进行类型推导
arr.add('aaa');
print(arr.length);
// 常见的属性和方法
/*
属性
length -----长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空
方法
add 添加
addAll 拼接数组
indexOf 查找 是否有这个值
remove 删除 传入具体值
removeAt 删除 传入索引
fillRange(index,index,value) 修改 对等于 splice
insert(index,value) 指定位置插入
insertAll(index,list) 指定位置插入list
toList() 其他类型转换为list
join() list转换成字符串
split 字符串转化为List
forEach
map
*/
var arr2 = ["aa","bb","cc"];
print(arr2.reversed); // 翻转后得到的不是数组
var newArr2 = arr2.reversed.toList(); // 需要toList 转一下
print(newArr2);
arr2.forEach((element){ // 循环
print(element);
});
var arr3 = arr2.map((e) => e+"aaa").toList();
print(arr3);
// map 返回每一项
// where 相当于 fillter 返回满足条件的
// any 只要返回一个就返回true
// every 每一个都满足就返回true
}
map:
void main(){
Map person = {
"name":"zs",
"age":20
};
print(person.keys.toList()); // 键
print(person.values.toList()); // 值
print(person.isEmpty); // 空
/*
addAll({'worl':'aaa'}) 增加
remove(name) 散出
containsValue(值) 查看映射内的值 判断是否有该值
*/
}
set:
void main(){
var s = new Set();
s.add('a');
s.add('b');
s.add('a');
print(s);
print(s.toList()); // 转换为数组
var arr = [1,2,1];
var newArr = new Set();
newArr.addAll(arr); // set 去重
print(newArr.toList());
}
3、类型转换or判断
一 判断
isEmpty:判断字符串是否为空
isNaN:判断是否为数字
is:例:var str = 'dadas'; str is String 判断 str 是否为字符串类型
二 转换
void main(){
String str = '1212';
var a = int.parse(str);
print(str);
var c = double.parse(str);
print(c);
// 如果str不是数字 处理方式一
// 捕获异常
str = '';
try {
c = double.parse(str);
} catch (e) {
print('$str不是数字');
}
}
4、其它方法
void main() {
var a = 10; // 自动类型推断
int b = 20; // 整型
var c = a~/b // a ~/ b 取整
print(c);
print("$a-----$b"); // $打印属性值
var d;
d??=20; // 如果 d 为空 就赋值20 相当于默认值
print(d);
d = a ?? 30; // 如果 a 为空 就为30 与js' || 相似
}
二、方法
1、定义与传值
void printInfo(){
print('printInfo');
}
int getNum(){
var num = 123;
return num;
}
getArr(){ // 可以不限制返回类型
}
int sumNum(int i){ // 限制约束传入的类型 可以不写
print(i);
return i;
}
String printUserInfo(String userName,int age){
return '$userName----$age';
}
void main(){
printInfo(); // 无返回
var n = getNum(); // 有返回
print(n);
sumNum(1111);
print(printUserInfo('aaa',10));
}
三、类
1、定义
class Person {
String? name; // 空安全 可以为null
int age = 0;
Person(String name,int age){// 相当于 构造器 简写等价于 Person(this.name,this.age)
this.name = name;
this.age = age;
}
void getInfo(){
print("${this.name}----${this.age}");
}
}
void main() {
var person = new Person('张三', 20);
person.getInfo();
}
2、继承 super 可调用直接与父级通信
class Person{
late String name,
late int age
Person(this.name,this.age)
}
class Orbiter extends Person{}
3、方法重写 @override 关键字
class Person{
late String name,
late int age
Person(this.name,this.age)
void getInfo(){}
}
class Orbiter extends Person{
@override
void getInfo(){}
}
4、abstract修饰符 抽象类和抽象方法,父类定义 子类实现
abstract class Describable {
void describe(); // 定义方法让子类实现
void describeWithEmphasis() {
print('=========');
describe();
print('=========');
}
}
class EffectiveDoer extends Describable {
// 实现了父类的抽象方法
void describe() {
print("abstract");
}
}
void main() {
var doer= new EffectiveDoer();
doer.describeWithEmphasis();
}