1.Dart中的操作符
1.1取整
void main()
{
var a = 7 ;
var b = 2;
print(a~/b);//输出1
}
1.2级联操作
当我们对单一对象进行一系列的操作时,就可以使用级联。在dart中,级联可以用 ..
来进行级联。如下例:
class Person {
String name;
String country;
void setCountry(String country){
this.country = country;
}
String toString() => 'Name:$name\nCountry:$country';
}
void main() {
Person p = new Person();
p ..name = 'Wang'
..setCountry('China');
print(p);
}
1.3 判断语句 if
dart的判断语句和java的语法是一样的。
if(a>b)
{
print(a);
}
else
{
print(b);
}
1.4for循环
dart中的for循环也和java一致。如下例
for(int i = 0; i<3; i++) {
print(i);
}
1.5 foreach循环 和in
void main() {
var collection = [0, 1, 2];
collection.forEach((x) => print(x));//forEach的参数为Function,这里的x就像是我们在java中的冒号左面的那个变量,但直接放在了匿名函数中作为了形参。
for(var x in collection) {
print(x);
}
}
1.6switch_case
dart中switch_case和java基本相同,这里不过多解释
1.7 ?.和??
?.(问号点运算符)代表的含义是如果符号左边的值为null,则会阻断符号右边的代码执行
??(双问号运算符)代表地含义是如果符号左边的值为null,则会将符号右边的值作为默认值赋给符号左边。
如下例:
var boolean = list[i]?.contains(1) ?? false;
.
.
.
2.异常
与Java语言不同的是,Dart中不存在检查性异常的概念,所有的异常都可以理解为是Java语言的运行时异常,也就是说程序不会强制要求编程者处理异常,但若发生异常,则程序中断执行。
Dart主要分为Error和Exception两种类型。
有趣的是在Dart中我们可以抛出任意类型的异常,甚至是一句话,但一般我们不会这样做。
在dart中,我们使用on +异常类型+catch(异常对象) 来捕获异常,如下例:
main() {
try {
test();
} on ArrayIndexOutOfBoundEXception catch(e){
print(e);
}on Error catch(e){
print(e);
}
}
test(){
throw ArrayIndexOutOfBoundEXception("下标越界");
}
如果我们不能处理这个异常,我们也可以重新抛出:
main() {
try {
test();
} on ClassError catch(e){
print(e);
rethrow;
}
}
test(){
throw ClassError("类型异常");
}
和java相同的一点是,我们可以用finally去做最后的处理。
.
.
.
3.类和对象
dart中所有类均继承自object
dart类的声明和java类似。用class来标记一个类。用new来创建对象。在没有重写构造函数的时候,会默认存在一个无参构造函数。
3.1类的定义
class Point {
num x;
num y;
num z;
}
void main() {
var point = new Point();
print(point.x);
}
3.2静态资源
dart中静资源由static关键字来修饰,其约束情况和java基本类似,不同的一点是dart中的静态资源只能过通过类名来访问,不能通过对象来访问,而java中对象也可以访问类中的静态资源。
3.3命名构造函数
Dart的语法不支持函数重载,无法像Java语言一样使用构造方法重载。因此当需要使用多个构造函数时,需要使用命名构造函数这种形式
void main(){
var a = new NumberTest(2,3);
var b = new NumberTest.cons1();
var c = new NumberTest.cons2(5);
a.display();
b.display();
c.display();
}
class NumberTest{
num a;
num b;
NumberTest(this.a, this.b){} //构造函数
NumberTest.cons1(){//命名构造函数1
this.a = 0;
this.b = 0;
}
NumberTest.cons2(this.a){//命名构造函数2
this.a = a;
this.b = 0;
}
void display(){
print("数据:${this.a},${this.b}");
}
3.4抽象类
在Dart中类和接口是统一的,类就是接口
如果你想重写部分功能,那么你可以继承一个类
如果你想实现某些功能,那么你也可以实现一个类
使用abstract关键字来定义抽象类,并且抽象类不能被实例化
抽象方法不需要关键字,直接以分号 ; 结束即可
示例代碼如下:
abstract class Shape { // 定义了一个 Shape 类/接口
num perimeter(); // 这是一个抽象方法,不需要abstract关键字,是隐式接口的一部分。
}
class Rectangle implements Shape { // Rectangle 实现了 Shape 接口
final num height, width;
Rectangle(num this.height, num this.width); // 紧凑的构造函数语法
num perimeter() => 2*height + 2*width; // 实现了 Shape 接口要求的 perimeter 方法
}
class Square extends Rectangle { // Square 继承 Rectangle
Square(num size) : super(size, size); // 调用超类的构造函数
}
这篇文章就到这里,下篇见