Dart基础之关键知识点

本文介绍了Dart编程的关键知识点,包括final和const变量的区别,常量与变量赋值规则,Object与dynamic的使用,异常处理的throw机制,解决命名冲突的this关键字,父类构造函数的调用方式,以及成员初始化与构造函数的执行顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、final变量和const变量

final 表示一个运行时常量(在程序运行的时候赋值,赋值后值不再改变)。const 表示一个编译时常量,在程序编译的时候它的值就确定了。实例变量可以是 final 类型但不能是 const 类型, 只能在以下3个对方进行初始化:

  1.  在变量声明时;
  2. 参数构造函数中(this.变量名);
  3. 构造函数的初始化列表中进行初始化;

2、常变量可以赋值给非常变量,反之不可以。

3、Object 和 dynamic

 

 

4、throw:Dart 可以抛出任意类型的对象

下面是关于抛出或者 引发 异常的示例:

throw FormatException('Expected at least 1 section');

 也可以抛出任意的对象:

throw 'Out of llamas!';
throw 404;

5、当存在命名冲突时,使用 this 关键字。 否则,按照 Dart 风格应该省略 this 

class Point {
  int x;
  int y;
  Point(int x, int y) {
    this.x = x;
    this.y = y;
  }
  void show() {
    print("x=" + x.toString() + ", y=" + y.toString());
  }
}

对于以下面的输出,则输出x=10, y=50; 

var p = Point(10, 50);
p.show();

若定义一个和类成员变量重名的局部变量后,这时候要想输出成员变量的值,则必须使用this限定符了。

 6、父类构造函数的调用

若父类构造函数是无参数的构造函数(默认的或是自定义的),在子类中可以不用显式的调用父类的无参构造函数,系统会自动调用。

若父类构造函数是有参数的构造函数,则在子类中必须显示调用,且只能在参数化列表中显示调用(super(参数))。

class Point {
  int x;
  int y;
  Point(this.x, this.y);
}

class Point3D extends Point {
  int z;
  Point3D(int x, int y, this.z): super(x, y); //必须在参数化列表中显示调用
}

7、成员初始化和构造函数调用顺序

int initx() {
  print("父类成员变量声明时进行初始化");
  return 100;
}

int initId() {
  print("子类初始化列表进行初始化");
  return 100;
}

int initz() {
  print("子类成员变量声明时进行初始化");
  return 200;
}

class Point {
  int x = initx();
  int y;
  Point(this.y){
    print("父类构造函数");
  }
}

class Point3D extends Point {
  int z = initz();
  int id;
  Point3D(int y): id = initId(), super(y){
    print("子类构造函数");
  }
}

void main() {
  var p = Point3D(200);
}

 执行顺序与输出一致:

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值