Dart之基础知识巩固

一、Dart中的变量与常量
1.变量

1.var类型是任意数据类型,一旦赋值类型就会确定不可以在更改,确定类型的时间是在编译结束以后
2.强制变量的类型比如String value = "今天是清明节";

dynamic和Object

2、常量

不可变的变量例如一些配置项,对于不可变的变量可以使用final和const关键字,final修饰的关键字声明的变量为最终变量,const修饰的关键字为最终常量

final和const区别:

  1. final 与 const 修饰的变量取值时机不同。 const编译时常量,final是运行时常量(在第一次使用时被初始化),可以理解为’懒加载’
  2. final可修饰实例变量、const不可以修饰实例变量,类级别的常量,通常用 static const
  3. 应用范畴不同,final 只可用来修饰变量const 关键字即可修饰变量也可用来修饰 常量构造函数
  4. 相同内容对象创建不同。内存中重复创建值,相同时final在内存中重复创建,const会引用相同值
//2.
class A{
 static const B = 0;
}
print(A.B)
//5.
class A{}
final A a = new A();

final和const相同点:

  1. 都必须初始化final height = 10;
  2. 类型声明可以省略final String a = 'abc';,final a = 'abc';
  3. 初始化后就不能进行赋值final a = 'aaa';a = 'abc'; 错误
  4. 不能和var同时使用 final var a = 'abc';’错误
3、 dynamic和Object

Object是dart所有对象的根基类,也就是说所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象

dynamic与var一样都是关键词,声明的变量可以赋值任意对象.而dynamic与Object相同之处在于,他们声明的变量可以在后期改变赋值类型.

不同点:
dynamic与Object不同的是,dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错. 如:

 dynamic a;
 Object b;
 main() {
     a = "";
     b = "";
     printLengths();
 }   

 printLengths() {
     // no warning
     print(a.length);
     // warning:
     // The getter 'length' is not defined for the class 'Object'
     print(b.length);
 }

二、基本数据类型
  • Dart 中 number 类型分为 int 和 double
  • 以bool代表布尔值,只有两个对象是布尔类型的,那就是true和false所创建的对象,这两个对象都是编译时常量。
  • String字符串
  • List数组
  • Map集合
三、Dart函数和运算符

dart中的函数和JavaScript中有点类似。你需要定义就是函数的名字、返回值(有返回值或者void)、参数。

  void test(){
    var name = fullName('可可', '吃货');
    print(name);
  }

  String fullName(String firstName, String lastName) {
    return "$firstName $lastName";
  }

命名参数
dart有个叫命名参数的东西。当你调用函数的时候,你必须指定参数的名字。要使用命名参数,可以将函数的参数包括在花括号{}内

  1. 算术运算符
  2. 比较运算符
  3. 复合运算符
  4. 逻辑运算符
  5. 位运算符
  6. 条件运算符
  7. 级联运算符
  8. 点运算符
var a = 9;
print(a??"10");//如果a的值为空那么变赋值给问号后面的值
print(a??="10")//与上面的语义一样
//级联运算符
/*
让开发者对某个连续的对象进行一系列的操作,减少中间变量的产生
*/
//点运算符
class A{
String name;
}
var p = A();
p.name="";
p?.a//null,如果调用的值为空那么就返回null否则就是正常访问
四、分支语句
  1. if和else
  2. for循环
  3. while循环
  4. break和continue
  5. switch和case
  6. 异常处理
switch(20){
case:10
print("");
}

异常处理

五、Dart面向对象
1.使用函数
  1. 自定义函数
  2. 定义可选参数class A{String name;A({this.name}); }
  3. 函数可选默认值class A{String name;A({this.name=李白“”}); }
  4. 匿名函数((){})
  5. 词法作用域(作用域可以防止变量被污染)
  6. 闭包(闭包也是函数,离开变量作用域会失效)
2.Dart中的类

构造函数:
构造方法通常与类名相同,this指向当前实例化对象

  1. 普通构造函数
var cat = new Cat("逗比", 12);

class Cat {
  String name;
  int age;

  Cat(String name, int age) {
    this.name = name;
    this.age = age;
  }
}
  1. 命名构造函数
Map map = new Map();
map['name']= "哈巴狗";
map['age'] = 5;
Dog d = new Dog.newBorn(map);


class Dog {
  String name;
  int age;

  Dog(this.name, this.age);

  Dog.newBorn(Map json) {
    name = json['name'];
    age = json['age'];
  }
}

继承类:可以使用extends关键字继承其他的类
调用父类中的普通构造方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
	void getName(){
	super.getName();
	print("name:${name}");
	}
}

调用父类中构造方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
Teacher(String name):super(name);
}

重载和重写:@override
重写父类方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
@override
	void getName(){
	print("");
	}
}

多类继承Mixin(拓展类)
dart中只支持单继承,但是想要继承多个类怎么办呢,Dart中的Mixins通过创建一个新类来实现,该类将mixin的实现层叠在一个超类之上以创建一个新类

class A{}
class B{}
class C extends A with B{}
//遇到相同功能的函数,最后载入的会覆盖之前的函数定义

Mixin不能实现构造方法,否则不能够被其他类所混合。作为Mixin的类虽然不能够定义构造方法,但是可以使用默认的构造方法进行实例化,如果不想使用Mixin类进行实例化那么可以用mixin关键字来定义Mixin类

抽象类:
实际上就是一个接口,只需要在类声明前添加abstract关键字,方法不需要。方法只需要签名,不需要实现。

abstract class TeacherInterface{
void teaching();
}
class Teacher implement TeacherInterface{
void teaching(

print(""));
}
//也可以实现多个接口

泛型

dart全面支持泛型。假设你想在你定义的类中,想持有任意类型的数据。如下是怎样使用泛型定义这样的类。

DataHolder<String> dataHolder = new DataHolder('Some data');
print(dataHolder.getData());
dataHolder.setData('New Data');
print(dataHolder.getData());
//下面这个会报错,因为dataHolder对象在创建的时候就已经限制为String类型
dataHolder.setData(123);
print(dataHolder.getData());

class DataHolder<T> {
  T data;

  DataHolder(this.data);

  getData() {
    return data;
  }

  setData(data) {
    this.data = data;
  }
}

3.异步编程

异步编程(上)
异步编程(下)

知识点

1、Dart是什么? 和Flutter是什么关系?

Dart是Google开发的一种面向对象的计算机编程语言,和Java类似
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台
Dart是flutter的程序开发语言
  1. main()和runApp()函数在flutter的作用分别是什么?有什么关系吗?
main函数是类似于java语言的程序运行入口函数
runApp函数是渲染根widget树的函数
一般情况下runApp函数会在main函数里执行
  1. 什么是widget? 在flutter里有几种类型的widget?分别有什么区别?能分别说一下生命周期吗?
Widget在flutter里基本是一些UI组件,和
在 Flutter 中,有两类常用的 Widget:

    无状态的 StatelessWidget
    有状态的 StatefulWidget
    
    初始化 (插入渲染树🌲)
    状态改变 (在渲染树中存在)
    销毁 (从渲染树中移除)
initState
didChangeDependencies
didUpdateWidget
deactivate
dispose
  1. 在flutter里streams是什么?有几种streams?有什么场景用到它?
异步数据队列
两种,单订阅流和广播流
网络状态监控
  1. future 和steam有什么不一样?
在 Flutter 中有两种处理异步操作的方式 Future 和 Stream,Future 用于处理单个异步操作,Stream 用来处理连续的异步操作.
  1. 什么是flutter里的key? 有什么用?
key是Widgets,Elements和SemanticsNodes的标识符。

key有LocalKey 和 GlobalKey两种。

LocalKey 如果要修改集合中的控件的顺序或数量。GlobalKey允许 Widget 在应用中的任何位置更改父级而不会丢失 State。
  1. 怎么理解Isolate?
isolate是Dart对actor并发模式的实现。 isolate是有自己的内存和单线程控制的运行实体。isolate本身的意思是“隔离”,因为isolate之间的内存在逻辑上是隔离的。isolate中的代码是按顺序执行的,任何Dart程序的并发都是运行多个isolate的结果。因为Dart没有共享内存的并发,没有竞争的可能性所以不需要锁,也就不用担心死锁的问题
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可可鸭~

想吃糖~我会甜

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值