1.簡介static
static意思是靜態,可以修飾類、字段、屬性、方法,但不能用于索引器、析構函數或類以外的類型。
標記為static的就不用創建實例對象調用了,可以通過類名直接點出來
2.static的三種用法:
1.用于變量前,表示每次重新使用該變量所在方法、類或自定義類時,變量的值為程序這次運行最后一次為變量賦值時的值,這個方法稱為靜態函數。
private void s()
{
static int a=1;
a++;
}
//方法第一次調用結束后a在內存內值為2;
//方法第一次調用結束后a在內存內值為3;
2.在方法(函數)前用static修飾,表示此方法為所在類或所在自定義類所有,而不是這個類的實例所有,這個方法稱為靜態方法:
情況一:非靜態方法:
class t
{
t(....(參數,下面同))
{
~~~~(方法內容,下面同)
}
void s(....)
{
~~~~
}
}
//當你在其他方法里調用這個類中的方法s,則需先聲明這個類的變量如:t sd = new t(....);
//再在t里調用方法:sd.s(....);
情況2:靜態方法:
class t
{
t(....(參數,下面同))
{
~~~~(方法內容,下面同)
}
static void s(....)
{
~~~~
}
}
//當你在其他方法里調用這個類中的方法s,
//則不用先聲明這個類的變量如直接調用方法:t.s(....);
3.用于class前,說明此類型無法新建實例,簡單點說這個類型的方法全是靜態方法,這個類里的非靜態方法是不能使用的,這個類型稱為靜態類。
比如C#控制臺操作的Cancle類里面的成員就被標記為靜態的,可以直接用Concle.直接點出來使用。
如果沒有標記為靜態就要通過創建實例對象來調用,比如說動態字符串StringBuilder就要new一個實例來調用
StringBuilder sb =new StringBuilder();
sb.xxx(); //xxx是方法名
static class t
{
~~~~
}
~~~~
class d
{
~~~~
void f(....)
{
~~~~
t v = new t();//此時程序會出現錯誤
}
}
注意:
1.盡管類的實例包含該類所有實例字段的單獨副本,但每個靜態字段只有一個副本。
2.不可以使用this來引用靜態方法或屬性訪問器。
3.如果對類應用static 關鍵字,則該類的所有成員都必須是靜態的。
4.類和靜態類可以有靜態構造函數。 靜態構造函數在程序開始和類實例化之間的某個時刻調用。
3.總結:
靜態類:
如果一個類,被聲明為靜態類,那么該類不可以被實例化,也不可以被繼承,同時不可以包含非靜態成員。
非靜態類中,可以包含靜態成員。
靜態方法:
靜態方法中,不可以訪問非靜態成員。
非靜態方法中,可以調用靜態和非靜態成員。
靜態成員的生命周期是:從程序開始到程序結束。