语言详解详细讲解
说明 延迟加载异常 格式异常 整数除零异常 IO异常 隔离产生异常 超时异常
异常-Error类型
名称
AbstractClassInstantiationError ArgumentError AssertionError AsyncError CastError ConcurrentModificationError CyclicInitializationError
}
类-调用超类构造函数
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('子类构造函数'); }
类-Setter和Getter
class Rectangle { num left; num top; num width; num height;
Rectangle(this.left, this.top, this.width, this.height);
num get right => left + width; set right(num value) => left = value - width; num get bottom => top + height; set bottom(num value) => top = value - height; }
} finally { print('end');
}
类-构造函数
//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); }
流程控制语句
• if else • for, forEach, for-in • while , do-while • break , continue • switch case
异常-Exception类型
名称 DeferredLoadException FormatException IntegerDivisionByZeroException IOException IsolateSpawnException TimeoutException
//在构造函数的初始化列表中使用super(),需要把它放到最后 Child.fromJson(x, y)
:x = x, y = y, super.fromJson(x, y) {
print('子类命名构造函数'); } }
类-常量构造函数
class Point2 { //定义const构造函数要确保所有实例变量都是final final num x; final num y; static final Point2 origin = const Point2(0, 0);
存在)
内置类型-Runes
Main(){ Runes runes = new Runes('\u{1f605} \u6211‘); var str1 = String.fromCharCodes(runes); print(str1);
}
内置类型-Symbol
• Symbol标识符,主要是反射用, 现在mirrors模块已经被移除
内置类型
• Numbers 数值 • Strings 字符串 • Booleans 布尔值 • Lists 列表(数组) • Sets 集合 • Maps 集合 • Runes 符号字符 • Symbols 标识符
内置类型-num, int, double
• int : 整数值 • double : 64-bit双精度浮点数 • int和double是num的子类
}
类-初始化列表
import 'dart:math';
class Point { //final变量不能被修改,必须被构造函数初始化 final num x; final num y; final num distanceFromOrigin;
//初始化列表 Point(x, y)
: x = x, y = y, distanceFromOrigin = sqrt(x * x + y * 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) {
操作符
描述 后缀操作
前缀操作
乘除 加减 位移 按位与 按位异或 按位或 类型操作 相等 逻辑与 逻辑或 是否为空 三目运算 级联
赋值
操作符
expr++ expr-- () [] . ?.
-expr !expr ~expr ++expr --expr
* / % ~/ +<< >> & ^ | >= > <= < as is is! == != && || ?? expr1 ? expr2 : expr3 .. = *= /= ~/= %= += -= <<= >>= &= ^= |= ??=
OutOfMemoryError 内存溢出错误
RemoteError
远程错误
StackOverflowError 堆栈溢出错误
StateError
状态错误
UnimplementedError 未实现的错误
UnsupportedError 不支持错误
异常-抛出
// 抛出Exception 对象 // throw new FormatException(‘格式异常'); // 抛出Error 对象 // throw new OutOfMemoryError(); // 抛出任意非null对象 // throw '这是一个异常';
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"); } }
牌,可使用+将两个List合并
内置类型-Map
• 跟java类似
内置类型-Set
• set1.difference(set2):返回set1集合里有但set2里没有的元 素集合
• set1.intersection(set2):返回set1和set2的交集 • set1.union(set2):返回set1和set2的并集 • set1.retainAll():set1只保留某些元素(要保留的元素要在原set中
内置类型-String
• Dart 字符串是 UTF-16 编码的字符序列,可以使用单引号 或者双引号来创建字符串
• 可以使用三个单引号或者双引号创建多行字符串对象。
• 可以使用 r 前缀创建”原始raw”字符串。
• 可以在字符串中使用表达式: ${expression},如果表达式 是一个标识符,可以省略 {},如果表达式的结果为一个 对象,则 Dart 会调用对象的 toString() 函数来获取一个 字符串。
内置类型-bool
• bool对象未初始化的默认值是null
内置类型-List
• Dart中可以直接打印list包括list的元素, List也是对象。java中直接打印list结果是 地址值
• Dart中List的下标索引和java一样从0开始 • 和java一样支持泛型。 • 有增删改查,支持倒序,自带排序、洗
FallThroughError JsonUnsupportedObjectError
说明
抽象类实例化错误 参数错误 断言错误 异步错误 Cast 错误 并发修改错误 周期初始错误
Fall Through 错误 json 不支持错误
名称
说明
NoSuchMethodError 没有这个方法错误
NullThrownError Null 错误
变量-final和const
区别(需要注意的地方):
• 类级别常量,使用static const • const可使用其他const 常量的值来初始化其值 • 使用const赋值声明,const可省略 • 可以更改非final、非const变量的值,即使曾经具有const值 • const导致的不可变性是可传递的 • 相同的const常量不会在内存中重复创建 • const需要是编译时常量