Skip to content

Dart 开始

入口方法

dart
# main方法没有返回值,后面必需有;号
void main() {
  print('object');
}

main() {
  print('object');
}

注释

dart
// void main() {
//   print('object');
// }

/**
 * main() {
  print('object');
}
 */

///main() {
///  print('object');
///}

变量

使用 var 定义变量,定义任意类型,会自动推断类型

类型关键词来定义变量,只能定义指定的类型

Dart 的命名规则:

  • 变量名称必须由数字、字母、下划线和美元符($)组成。
  • 注意:标识符开头不能是数字
  • 标识符不能是保留字和关键字
  • 变量的名字是区分大小写的如: age 和 Age 是不同的变量。在实际的运用中,也建议,不要用一个
  • 标识符(变量名称)一定要见名思意:变量名称建议用名词,方法名称建议用动词
dart
void main() {
  var str = 'hello world';
  var num = 1234;
  print(str);
  print(num);
}
dart
void main() {
  String rh = '隆海';
  print(rh);
}

常量

常量不可以修改,定义有以下两种方式:

  • const 修饰符

    • const声明的常量是在编译时确定的,永远不会改变
    • const关键词在多个地方创建相同的对象的时候,内存中只保留了一个对象
  • final修饰符

    • final 申明的常量允许声明后再赋值,赋值后不可改变,final声明的变量是在运行时确定的
    • 而 final 不仅有const的编译时常量的特性,最重要的它是运行时常量,并且 final 是惰性初始化,即在运行时第一次使用前才初始化

注意:永远不改变的值,请使用 final 或const修饰它,而不是使用 var 或其他变量类型。

dart

void main() {
  const a = new DateTime.now();
  print(a);
}

常量构造函数

常量构造函数总结如下几点:

常量构造函数总结如下几点:

  • 常量构造函数需以const关键字修饰
  • const构造函数必须用于成员变量都是final来修饰
  • 如果实例化时不加const修饰符,即使调用的是常量构造函数,实例化的对象也不是常量实例
  • 实例化常量构造函数的时候,多个地方创建这个对象,如果传入的值相同,只会保留一个对象
  • Flutter中const修饰不仅仅是节省组件构建时的内存开销,Flutter在需要重新构建组件是不应该改变的,重新构建没有任何意义,因此Flutter不会重新构建const组件
dart
import 'dart:core';

class Container {
  int width;
  int height;
  Container({required this.width, required this.height});
}

void main() {
  var c1 = new Container(width: 100, height: 200);
  var c2 = new Container(width: 100, height: 200);
  print(identical(c1, c2));//false
}
dart
import 'dart:core';
//常量构造函数
class Container {
  final int width;
  final int height;
  const Container({required this.width, required this.height});
}

void main() {
  var c3 = const Container(width: 100, height: 200);
  var c4 = const Container(width: 100, height: 200);
  print(identical(c3, c4));//true
}

检查内存地址

dart
import 'dart:core';

// dart : core库中identical-函数的用法介绍如下。
//用法:检查两个引用是否指向同一个对象。
// bool identical(Object? a, Object? b);
void main() {
  var o1 = new Object();
  var o2 = new Object();
  print(identical(o1, o2)); //false
}