1. 程式人生 > 實用技巧 >Dart基礎回顧——var 、dynamic 、Object 區分及final、const、static關鍵字

Dart基礎回顧——var 、dynamic 、Object 區分及final、const、static關鍵字

一、var 、dynamic 、Object 區分

var:宣告變數,可以賦值任意物件 。Dart中var變數一旦賦值,型別便會確定,則不能再改變其型別.

dynamic:宣告變數,可以賦值任意物件。宣告的變數可以在後期改變賦值型別。

Object是Dart所有物件的根基類,也就是說所有型別都是Object的子類(包括Function和Null),所以任何型別的資料都可以賦值給Object宣告的物件。

dynamic與var一樣都是關鍵詞,宣告的變數可以賦值任意物件。dynamic與Object相同之處在於,他們宣告的變數可以在後期改變賦值型別。

二、final、const、static關鍵字

final、const相同點:

    • 兩者都是宣告不可更改變數,變數只能設定一次;
    • 變數型別可以省略;

final、const不同點:

  final:

    • 執行時常量;
    • 宣告檔案中的變數:必須在宣告時賦值;
    • 宣告類的成員變數:可以在宣告時賦值,也可以通過建構函式賦值語法糖ClassName({this.variable}),或者初始化列表的方式賦值;

  const:

    • 編譯時常量,必須定義的時候初始化;
    • const 變數是類級別的,需要標記為static const;
    • const修飾類的建構函式時,它要求該類的所有成員都必須是final的。
    • 作為修飾值的時候,物件的整個深度狀態可以在編譯時完全確定,並且物件將被凍結並且完全不可變,eg:const
      Point(0, 0);

const 變數 是隱式 final 的型別.

static:用於宣告類變數和類方法;

它通常為全域性資料變數管理記憶體。 靜態變數和方法是類的成員,而不是單個例項。

靜態變數或方法對於類的每個例項都是相同的,因此,如果我們將資料成員宣告為靜態,則無需建立物件即可訪問它。

不需要類物件來訪問靜態方法或變數,我們可以通過將類名放在靜態變數或方法之前來訪問它。 使用類名,我們可以從其他類中呼叫類方法。

它在類載入時分配一次記憶體,並在整個程式中使用。

靜態方法的概念也類似於靜態變數。 靜態方法是類的成員,而不是類例項。 靜態方法只能使用靜態變數,並且可以呼叫類的靜態方法。

不需要建立類的例項對其進行訪問。 在其他類中使用靜態方法時,該方法很有用。

  要點:

    • 靜態變數也被標識為類變數,靜態方法也被標識為類方法;
    • 可以使用類名訪問靜態變數和靜態方法。
    • 靜態方法只能使用靜態變數,並且可以呼叫類的靜態方法;
    • 靜態變數/方法的特定副本分佈在類的所有例項之間;
    • 在檔案中,變數不能宣告為static;

附加:

編譯時常量:

其值在編譯時就能確定。

無需重複建立例項,在記憶體中只有一份。

初始化列表的方式

class A {

    final value;
    
    A(int input) : value = input;
}

建構函式方式

class B {

    int a;
    int b;

    B({this.a, this.b = 1});
}