static:
用于修飾成員變量,這個(gè)變量是屬于類的,而不是屬于對(duì)象的,除此之外沒有其他別的含義了,static修飾符的使用方式和Java類似。 static變量直到運(yùn)行期被使用時(shí)才會(huì)實(shí)例化。
final:
用于修飾變量,表示單賦值(single-assignment),使用final修飾的變量必須進(jìn)行初始化,一旦被賦值之后,不能夠再次被賦值,否則編譯會(huì)報(bào)錯(cuò)。跟java的區(qū)別是:final不能用來修飾類和方法。
const:
表示對(duì)象的狀態(tài)完全可以在編譯期間確定,并且完全是不可變的。
- const變量不會(huì)在內(nèi)存中重復(fù)創(chuàng)建,如果表達(dá)式被調(diào)用了多次,則重用之前創(chuàng)建好的常量。
- const構(gòu)造函數(shù)的前提是成員變量必須都是用final修飾的。const單例多例可以如下實(shí)現(xiàn):
class Man {
final int age;
const Man({this.age});
// static const m = const Man(age: 7);
}
main() {
// const Man m0 = new Man(age: 7); error
const Man m1 = const Man(age: 19);
const Man m2 = const Man(age: 20);
const Man m3 = const Man(age: 19);
print(m1 == m2); //false
print(m1 == m3); //true
}