static靜態變數與非靜態變數的區別
記憶體分配
靜態變數在應用程式初始化時,就存在於記憶體中,直到它所在的類的程式執行結束時才消亡。
初始化:如果不顯式初始化,那麼將被隱式初始化為0。;
而非靜態變數需要例項化後才分配記憶體。
生存週期
靜態變數生存週期為應用程式的生存週期。
非靜態變數存在週期取決於例項化的類的存在週期。
呼叫方式
靜態變數只能通過「類.靜態變數名」呼叫,類的例項不能呼叫;
非靜態變數當該變數所在的類被例項化後,可通過例項化的類名直接訪問。
共享方式
靜態變數是全域性變數,被所有類的例項物件共享。非靜態變數是區域性變數,不共享。
訪問方式
靜態成員不能訪問非靜態成員;非靜態成員可以訪問靜態成員。
靜態變數在類裝載的時候分配記憶體,以後建立的物件都使用的該記憶體,相應的操作也就是對這塊記憶體進行操作。也可以看作是另類的全域性變數。
靜態建構函式和靜態變數
class program
}class b
}static void main(string args)//1
, y = ", a.x, b.y);//⑤ 輸出結果
console.readline();}}
輸出
使用靜態建構函式時應該注意
6. 靜態建構函式既沒有訪問修飾符,也沒有引數。因為是.net呼叫的,所以像public和private等修飾符就沒有意義了。
7. 是在建立第乙個類例項或任何靜態成員被引用時,.net將自動呼叫靜態建構函式來初始化類,也就是說我們無法直接呼叫靜態建構函式,也就無法控制什麼時候執行靜態建構函式了。
8. 乙個類只能有乙個靜態建構函式。
9. 無引數的建構函式可以與靜態建構函式共存。儘管引數列表相同,但乙個屬於類,乙個屬於例項,所以不會衝突。
10. 最多隻執行一次。
11. 靜態建構函式不可以被繼承。
12. 如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動生成預設的靜態建構函式。
參考:參考:
關於C 中static靜態變數
c 靜態變數使用static 修飾符進行宣告,在類被例項化時建立,通過類進行訪問不帶有 static 修飾符宣告的變數稱做非靜態變數,在物件被例項化時建立,通過物件進行訪問乙個類的所有例項的同一c 靜態變數都是同乙個值,同乙個類的不同例項的同一非靜態變數可以是不同的值。靜態函式的實現裡不能使用非靜態...
C 中static靜態變數的用法
使用 static 修飾符宣告屬於型別本身而不是屬於特定物件的靜態成員static修飾符可用於類 字段 方法 屬性 運算子 事件和建構函式,但不能用於索引器 析構函式或類以外的型別 靜態全域性變數 定義 在全域性變數前,加上關鍵字 static 該變數就被定義成為了乙個靜態全域性變數。特點 a 該變...
static 靜態變數
function a a a a 輸出什麼是static靜態變數?以下為在c語言中的理解 靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在靜態儲存區內分配儲存單元 該 區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 ...