变量声明
- var:可选类型,dart会自动推断它的数据类型,并不存储值,它存值的对象的引用;
- dynamic:它实际上在运行期是一个Object
- Object:基类
变量 -默认值
- 没有初始化的变量自动获取一个默认值为null
- 一切皆对象,对象的默认值为null
变量final和const
共同点:
- 声明的类型可省略
- 初始化后不能再赋值
- 不能和var同时使用
区别
-
static const:表示静态常量
-
const与final区别:const在编译期间要确定值,final在运行时确定值
-
const定义的构造函数的类的成员变量需要用final修饰
函数-可选参数
定义:
//可选位置 参数
void login(int a, [int b = 5, int c = 5]) {
print('a = $a b = $b c = $c');
}
//可选命名 参数
void login2(int a, {int b = 5, int c = 5}) {
print('a = $a b = $b c = $c');
}
调用:
login(22);//a
login(22, 2); //a,b
login(22, 2, 4);//a,b,c
login2(1,c:2);
函数-闭包
Function makeAddFunc(int x) {
x++;
return (int y) => x + y;
}
main() {
var addFunc2 = makeAddFunc(2);
var addFunc4 = makeAddFunc(4);
print(addFunc2(3));
print(addFunc4(3));
}
函数-函数别名
typedef Fun1(int a, int b);
typedef Fun2<T, K>(T a, K b);
int add(int a, int b) {
print('a + b');
return a + b;
}
class Demo1 {
Demo1(int f(int a, int b), int x, int y) {
var sum = f(x, y);
print("sum1 = $sum");
}
}
class Demo2 {
Demo2(Fun1 f, int x, int y) {
var sum = f(x, y);
print("sum2 = $sum");
}
}
class Demo3 {
Demo3(Fun2<int, int> f, int x, int y) {
var sum = f(x, y);
print("sum3 = $sum");
}
}
异常-Exception类型
main() {
//异常
try{
// //自定义异常
throw FormatException("格式异常");
// throw '格式异常';
}on FormatException{
print('发生了格式异常');
}catch (e,s){
// //第一个参数是异常信息
// //第二个参数是堆栈信息
print(e);
print(s);
// rethrow ;
}finally{
print('end');
Runes f;
}
}
名称 | 说明 |
DeferredLoadException | 延迟加载异常 |
FormatException | 格式异常 |
IntegerDivisionByZeroException | 整数除零异常 |
IOException | IO异常 |
IsolateSpawnException | 隔离产生异常 |
TimeoutException | 超时异常 |
类-构造函数
//java中写法
class Point {
double x;
double y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
//dart建议写法
class Point {
num x;
num y;
Point(this.x, this.y);
}
//类-命名构造函数
class Point {
num x;
num y;
Point(this.x, this.y);
//命名构造函数
Point.fromJson(Map json) {
x = json['x'];
y = json['y'];
}
}
//类-重定向构造函数
class Point {
num x;
num y;
Point(this.x, this.y);
//重定向构造函数,使用冒号调用其他构造函数
Point.alongXAxis(num x) : this(x, 0);
}
//类-调用超类构造函数
class Parent {
int x;
int y;
//父类命名构造函数不会传递
Parent.fromJson(x, y)
: x = x,
y = y {
print('父类命名构造函数');
}
}
class Child extends Parent {
int x;
int y;
//若超类没有默认构造函数, 需要手动调用超类其他构造函数
Child(x, y) : super.fromJson(x, y) {
//调用父类构造函数的参数无法访问 this
print('子类构造函数');
}
//在构造函数的初始化列表中使用super(),需要把它放到最后
Child.fromJson(x, y)
: x = x,
y = y,
super.fromJson(x, y) {
print('子类命名构造函数');
}
}