美文网首页
dart 基础语法

dart 基础语法

作者: 霍霍9527 | 来源:发表于2020-01-27 19:56 被阅读0次

    var j;//Object类型,如果指定了值 就是具体类型,没有指定就是Object类型
    j = 10;
    j = “huo”;

    dynamic z = “huo”;//不是编译的时候确定的 而是运行的时候确定的
    z = 100;

    final i = 1;//运行时常量
    const z = i;//error ,运行期的常量不能给编译器的常量赋值
    const j = 1;//编译期常量

    List<int> list = const [1,2,3];//list对象不可变 list.add(1) error 编译期没问题,运行就报错
    const List<int> list = [1,2,3];//list引用不可变 list = [1,2,3]; error 编译期就会提示错误 list.add(1) error 也报错误

    Unicode: Runes

    代码点与代码单元

    Symbols 内置类型

    studio 魔板代码 live

    function

    typedef void F(int i,int j);//给一个方法定义类型

    void fun3(void f1(int i,int j)){
    }
    //没有java的重载方法,dart是下面的实现方式
    可选位置参数fun([int i,int j])
    可选命名参数fun({int i,int j})

    异常:比较灵活可以抛出异常,也可以抛出一个类比如int String等等。

    void test(){
        throw  Exception(“XXXXX”);  抛出异常
        //throw Error();        抛出error
        //throw 11;     抛出int
        //throw “XXXXX”  抛出字符串
    }
    

    //普通的异常处理

    try{
        …
    }catch(e,s){
    //e 异常内容信息          e:XXXXX
    //s,异常的调用栈信息,s:StackTrace 
    }
    

    不同的异常做不同的处理

    try{
        test()
    } on Exception catch(e,s){
         ……
    } on int catch(e){
         ……
    } on String catch(e){
        …..
    } on Function catch(e){ ….
    }
    


    dart class 没有作用域private public protected等特殊字符,私有属性以下划线开头,类也是下划线开头就是私有类
    库、文件名 命名 lowercase_with_underscoures
    其他的都是 驼峰标识 class field 等等

    构造方法

    class Point{
        int _x;
        int y;
        //1.方式一
        Point(this._x,this.y);
        //2,方式二
        Point({int x,int y}){//可以有大括号的构造方法,但是不能用this关键字。
        }
        //3,方式三  命名构造方法
        //dart不允许有重载方法,但是构造函数多个参数重重在如何实现呢,下面的方式给他一个名字
        //命名构造方法   有上面的大括号的方式为什么还要下面的呢,下面的通过命名就可以知道里面传递的参数,更好的设计代码
        Point.Y(this.y); 
        Point.X(this._x)    Point.XY() :_x=1,y=2//参数初始化列表
        Point.fromMap(Map map):_x=map[“x”],y=map[“y”]//参数初始化列表
        Point.fromMap(Map map):{//参数初始化列表       _x=map[“x”],
            y=map[“y”]
        }
        Point.main(int x):this(x,0);//调用主构造方法
        
        //注意:
        //常量构造方法   成员属性必须要是final的
        //const Point(this._x,this.y);
        //使用const 来创建的多个对象,如果构造方法是常量构造方法,并且传递的参数也是一样的,那么这几个对象是同一个编译期常量
        // var p1 = const Point(1,1);   // var p2 = const Point(1,1);   // p1 == p2
        
        
        //工厂构造方法  必须要返回实例对象  
        factory Point.get(int x){       return Point(x,1);
        }
        //可以用来实现单例  如下: //static Point _instance;//静态的属性
        //Point._newInstance();//私有命名构造方法
        //factory Point.getInstance(){
        //  if(_instance == null){
        //      _instance = Point._newInstance();
        //  }
        //}
    
        //属性调用是调用了隐式的get,与set方法
            //int _x;
            // int get x => _x;//x其实是一个方法名字,并不是类属性
    // int get x => _x+1;表达式
    // int get _x => _x+1;error  因为_x有了隐式的get方法了这里又定义,dart不支持重载方法,所以会报错
    // set xxxxx(int x) => _x = x;
    
    
    //运算符重载  格式:operator 运算符
    //Point operator +(Point other){
     // var point = Point();
     // point._x = + _x + other._x;
    //  return point;
    //}
    }
    

    dart 没有interface,但是其任何类都可以看成一个接口
    class Test1{}
    class Test2 implement Test1{}

    类里面有call方法,只有可以用对象调用该方法

    class Test{
        void call(){}
    }  
    Test test = Test();
    test();//调用Test的call()方法 没有call方法就报错,groovy也是这样兼容java
    

    混合mixins

    被混入的类不能有构造方法

    相关文章

      网友评论

          本文标题:dart 基础语法

          本文链接:https://www.haomeiwen.com/subject/zavethtx.html