靜態變量 static 全局變量

靜態變量static 全局變量global

 

      靜態變量在java也叫類變量從名字可以看出它是屬於某個類的而不是類的實例。它的關鍵字是static存儲在靜態存儲區,當程序執行,類的代碼被加載到內存,類的靜態變量就分配了內存空間,他是屬於類的也就是沒個實例對象都是對於以個靜態變量,靜態變量的內存空間知道程序退出才釋放所佔用的內存空間。靜態變量直接通過類名訪問(java 也能通過對象名訪問)。

 有人會分全局的靜態變量、局部的靜態變量;全局靜態變量失去了“全局”的普遍含義,它的作用域限定在本文件裏。而靜態變量的聲明是應該出現在類裏不是類的函數裏。

 

       全局變量關鍵字global也是靜態存儲方式,存儲在靜態存儲區。全局變量只需在一個源文件中定義,就可以作用於所有的源文件。當然,其他不包含全局變量定義的源文件需要用extern 關鍵字再次聲明這個全局變量。

 

 

全局變量和靜態變量的區別:

 全局變量在整個工程文件內都有效;靜態全局變量只在定義它的文件內有效;靜態局部變量只在定義它的函數內有效,只是程序僅分配一次內存,函數返回後,該變量不會消失;局部變量在定義它的函數內有效,但是函數返回後失效。全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式,靜態全局變量當然也是靜態存儲方式。這兩者在存儲方式上並無不同。這兩者的區別雖在於非靜態全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。而靜態全局變量則限制了其作用域,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。由於靜態全局變量的作用域侷限於一個源文件內,只能爲該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。

 也能這麼看:

 A.若全局變量僅在單個文件中訪問,則可以將這個變量修改爲靜態全局變量,以降低模塊間的耦合度;

 B.若全局變量僅由單個函數訪問,則可以將這個變量改爲該函數的靜態局部變量,以降低模塊間的耦合度;

 設計和使用訪問動態全局變量、靜態全局變量、靜態局部變量的函數時,需要考慮重入問題:

 D.如果我們需要一個可重入的函數,那麼我們一定要避免函數中使用static變量(這樣的函數被稱爲:帶“內部存儲器”功能的函數)

 E.函數中必須要使用static變量情況:比如當某函數的返回值爲指針類型時,則必須是static的局部變量的地址作爲返回值,若爲auto類型,則返回爲錯指針。

 

 

從以上分析可以看出,把局部變量改變爲靜態變量後是改變了它的存儲方式即改變了它的生存期。把全局變量改變爲靜態變量後是改變了它的作用域,限制了它的使用範圍。因此static 這個說明符在不同的地方所起的作用是不同的。應予以注意。

 

 

變量的6種作用:全局作用域,文件作用域,命名空間作用域,類作用域,局部作用域,語句作用域。


發佈了34 篇原創文章 · 獲贊 1 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章