Flutter入门第一步-Dart语言入门(二)

Flutter入门第一步-Dart语言入门(二)

1.Dart中的操作符

2.异常

3.类和对象

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); // 调用超类的构造函数
}

这篇文章就到这里,下篇见

发布了47 篇原创文章 · 获赞 15 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_41525021/article/details/104296464