欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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}");

}

打印结果:

Dart笔记

观察可以发现 studentA  修改了name  ,age  两个地方 打印结果两个地方都被改变

但是,studentB 没有修改任何数据,但是打印出来 name是默认初始化的lucy没有改变,age却不是原来初始化的值,

而是studentA 修改后的数值。

是因为name是实例变量,只要 new 一个Student对象出来 name就是初始化的默认值,studentA 对象修改了name,但是对studentB并不起作用,除非studentB自己进行修改。

age变量被studentA 修改以后,studentB也被修改了。

 

Dart笔记

再来看这句话:实例变量可以是 final 类型但不能是 const 类型

就是说上例中name可以用final修饰,只是不可再被修改,但不能用const修饰,

因为类变量要被const修饰要加static,而加了static就变成常量变量变成和age一样,不再是实例变量。

相关标签: Dart