Dart笔记
程序员文章站
2022-05-30 09:22:14
...
1 Dart中类 中无论函数还是方法都不支持重载,方法名一样,参数不同会报错。
class A{
A(){
}
A(int a){
//这个地方会报错,说A()函数已经存在
}
A.eat(){
//构造函数
}
A.sing(int food){
//构造函数
}
A.sleep(){
//构造函数
}
}
2 Getter 和 Stter 方法
class D{
int num1,num2;
// Getter方法
// int表示返回值类型,可以省略不写
// get 声明是Get方法
int get sum => num1+num2 ;
// Setter方法
// setter方法不需要声明返回值类型
// set 声明是Setter方法
set reduce(int num3) => num3-num2;
}
3 final 和 const 的比较
class D{
final boa;
// const声明的变量必须初始化,不初始化会报错;
// final声明的变量可以不初始化, 但必须在构造函数体执行之前初始化
// Const 变量是类级别的,需要标记为 static const,不声明static会报错
static const String bob = "bob";
void initBofamily(){
// 这个地方的Const 变量是方法里面,就不用必须声明static
const boc = "boc";
final bod = "bod";
}
D(int boaVaule):boa = boaVaule{
//此处为D的构造函数,boa初始化为boaVaule
//是在构造函数执行之前进行
}
}
还有一个区别是:实例变量可以是 final 类型但不能是 const 类型
首先来看一下什么是实例变量
class Student{
String name = "lucy";//实例变量
static int age = 26; //静态变量,它是公有的
}
main(){
Student studentA = new Student();
studentA.name = "bob";
Student.age = 32;
print("studentA name: ${studentA.name} , age: ${Student.age}");
Student studentB = new Student();
print("studentB name: ${studentB.name} , age: ${Student.age}");
}
打印结果:
观察可以发现 studentA 修改了name ,age 两个地方 打印结果两个地方都被改变
但是,studentB 没有修改任何数据,但是打印出来 name是默认初始化的lucy没有改变,age却不是原来初始化的值,
而是studentA 修改后的数值。
是因为name是实例变量,只要 new 一个Student对象出来 name就是初始化的默认值,studentA 对象修改了name,但是对studentB并不起作用,除非studentB自己进行修改。
age变量被studentA 修改以后,studentB也被修改了。
再来看这句话:实例变量可以是 final 类型但不能是 const 类型
就是说上例中name可以用final修饰,只是不可再被修改,但不能用const修饰,
因为类变量要被const修饰要加static,而加了static就变成常量变量变成和age一样,不再是实例变量。