dart基础

2019-03-28  本文已影响0人  淹死丶的鱼

dart文件命名是小写字母和下划线组成,没有基本数据类型一切皆对象,和很多语言一样是main方法为入口方法
支持顶部函数

void main(){
  print('aa');
}
内置的类型

​ 与Java的八大内置基本数据类型不同,Dart 内置支持下面这些类型:

变量的定义

变量命名有好几种方式可以

void main(){
  Object f="";///和java一样任何类默认都继承Object
  String a="";///可以和koltin一样通过${} 来拼接字符串
  bool bl=false;///布尔类型 与java类似
          ///int 和 double 都是num的子类
  int b=0;///dart中没有long类型 但会根据实际的值得大小 来在不同平台转换成对应的值
          ///例如:如果你写的范围超出了java中的int 在android平台就会自动变成long类型
  double c=0.0;///double和上面类似
  var d="";///如果声明的时候没有赋值,之后可以随便改变类型,但是如果声明的时候赋值了就会直接确定其类型
  dynamic e="";///这个类型会动态确定值得类型,也就是在运行时才会确定类型,声明了可以随意改变类型的,
              ///如果确定类型的话不建议使用它
}
final 和const区别

final 是运行时确定的常量,const是编译时就确定的常量 可以提高效率

static

static 和java类似

List和Map

和java不同 List和Map不是接口,可以直接使用
Map和koltin类似通过中括号 赋值
List获取值也和koltin类似通过中括号获取
不过提供的api比较丰富

  List<String> list=List();
  list.add("这是第一条");
  Map<String,String> map=Map();
  map["a"]="a";
循环控制语句

循环: for foreach while do while

List<String> list=List();///dart可以省略new关键字
  list.add("这是第一条");
  list.add("这是第二条");
  list.add("这是第三条");
  list.add("这是第四条");
  for (var i = 0; i < list.length; ++i) {
    print(list[i]);
  }
  list.forEach((s) {
    print(s);
  });
  int a=0;
  while(a<list.length){
    print(list[a]);
    a++;
  }
 int b=0;
 do{
   print(list[b]);
   b++;
 } while(b<list.length);
操作符
 String a=1>2?"a":"b";
  a..length..toString();
方法

在dart中方法是不能重载的,但是dart为我们提供了可选位置参数,和可选命名参数两种

void test(String s,[String a="a”,String b]){///可以在中括号中赋予默认中

}
void test(String s,{int a=0,String c=""}){///可以在大括号中赋予默认中

}
一等方法对象

在dart 中方法可以代表接口,使用时可以写成匿名方法,例如

void main(){
  fu((t){
    print(t);
  });
}
void fu(void t(String t)){///void t(String t) 这个作用相当于一个接口
  t("你好");
}

但是这样写感觉看着很乱我们来改一下

void main(){
  fu((t){
    print(t);
  });
}
void fu(Function t){///Function  声明一个方法一个方法
  t("你好");
}

但是这样我们就看不到需要传递的参数了 这里我们就要借助typedef这个关键字

void main(){
  fu((t){
    print(t);
  });
}
void fu(call_back c){
  c("你好");
}
typedef call_back(String t);

这样我们就可以名确定知道需要传递的参数

异常

和 Java 不同的是,所有的 Dart 异常是非检查异常。 方法不一定声明了他们所抛出的异常, 并且不要求你捕获任何异常。
Dart 提供了 Exception和Error 类型, 以及一些子类型。你还 可以定义自己的异常类型。但是, Dart 代码可以 抛出任何非 null 对象为异常,不仅仅是实现了 Exception 或者Error 的对象。
可以捕捉指定类型异常

try {
    throw 123;
} on int catch(e){
    //使用 on 指定捕获int类型的异常对象       
} catch(e,s){
    //函数 catch() 可以带有一个或者两个参数, 第一个参数为抛出的异常对象, 第二个为堆栈信息 ( StackTrace 对象)
    rethrow; //使用 `rethrow` 关键字可以 把捕获的异常给 重新抛出
} finally{
    
}

类的创建和使用都和java差不多,但是dart中并没有权限修饰符,只有一个下划线代表私有。首字母是下划线代表这个类、方法、属性不能被其他文件访问,dart是支持反射的,但是flutter中将dart的反射屏蔽掉了,所以在flutter开发中也就不能通过反射来操作。
构造方法

class Test {
  Test() {///普通构造方法和java一样 但是不能重载

  }
  factory Test(){///工厂构造方法  这里会报错,原因是方法不能重载
    
  }
}

实现单例有两种方式

  1. 和java一样的做法 输出为true可以知道两次调用的Test.intance是同一个对象
void main() {
  print(Test.intance().hashCode==Test.intance().hashCode);
}
class Test {
 static Test test;
 static intance(){
   return test??=new Test();
 }
}
  1. dart中为我们提供了工厂构造函数,我们可以使用工厂构造函数来实现,输出也为true,我们可以知道我们每一次创建新对象的时候并没有创建 还是第一次创建的对象,实现了单例
void main() {
  print(Te().hashCode==Te().hashCode);
}
class Te {
  int a=0;
  Te._intance(){
    a=1;
  }
  static Te te;
  factory Te(){
    return  te??=Te._intance();
  }
}
上一篇下一篇

猜你喜欢

热点阅读