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 內(nèi)置類型
studio 魔板代碼 live
function
typedef void F(int i,int j);//給一個方法定義類型
void fun3(void f1(int i,int j)){
}
//沒有java的重載方法,dart是下面的實現(xiàn)方式
可選位置參數(shù)fun([int i,int j])
可選命名參數(shù)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 異常內(nèi)容信息 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不允許有重載方法,但是構造函數(shù)多個參數(shù)重重在如何實現(xiàn)呢,下面的方式給他一個名字
//命名構造方法 有上面的大括號的方式為什么還要下面的呢,下面的通過命名就可以知道里面?zhèn)鬟f的參數(shù),更好的設計代碼
Point.Y(this.y);
Point.X(this._x) Point.XY() :_x=1,y=2//參數(shù)初始化列表
Point.fromMap(Map map):_x=map[“x”],y=map[“y”]//參數(shù)初始化列表
Point.fromMap(Map map):{//參數(shù)初始化列表 _x=map[“x”],
y=map[“y”]
}
Point.main(int x):this(x,0);//調用主構造方法
//注意:
//常量構造方法 成員屬性必須要是final的
//const Point(this._x,this.y);
//使用const 來創(chuàng)建的多個對象,如果構造方法是常量構造方法,并且傳遞的參數(shù)也是一樣的,那么這幾個對象是同一個編譯期常量
// var p1 = const Point(1,1); // var p2 = const Point(1,1); // p1 == p2
//工廠構造方法 必須要返回實例對象
factory Point.get(int x){ return Point(x,1);
}
//可以用來實現(xiàn)單例 如下: //static Point _instance;//靜態(tài)的屬性
//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
被混入的類不能有構造方法