1. 程式人生 > >static靜態變數的生命週期

static靜態變數的生命週期

靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也可以用static定義它為靜態自動變數,或稱靜態區域性變數,從而成為靜態儲存方式。由此看來,一個變數可由static進行再說明,並改變其原有的儲存方式。

1. 靜態區域性變數 
在區域性變數的說明前再加上static說明符就構成靜態區域性變數。例如:

static int a,b; static float array[5]={1,2,3,4,5};

靜態區域性變數屬於靜態儲存方式,它具有以下特點: 
(1)靜態區域性變數在函式內定義,但不象自動變數那樣,當呼叫時就存在,退出函式時就消失。靜態區域性變數始終存在著,也就是說它的生存期為整個源程式。 
(2)靜態區域性變數的生存期雖然為整個源程式,但是其作用域仍與自動變數相同,即只能在定義該變數的函式內使用該變數。退出該函式後,儘管該變數還繼續存在,但不能使用它。
(3)允許對構造類靜態區域性量賦初值。若未賦以初值,則由系統自動賦以0值。 
(4)對基本型別的靜態區域性變數若在說明時未賦以初值,則系統自動賦予0值。而對自動變數不賦初值,則其值是不定的。根據靜態區域性變數的特點,可以看出它是一種生存期為整個源程式的量。雖然離開定義它的函式後不能使用,但如再次呼叫定義它的函式時,它又可繼續使用,而且儲存了前次被呼叫後留下的值。因此,當多次呼叫一個函式且要求在呼叫之間保留某些變數的值時,可考慮採用靜態區域性變數。雖然用全域性變數也可以達到上述目的,但全域性變數有時會造成意外的副作用,因此仍以採用區域性靜態變數為宜。

2.靜態全域性變數

全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存方式上並無不同。這兩者的區別雖在於非靜態全域性變數的作用域是整個源程式,當一個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。而靜態全域性變數則限制了其作用域,即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於一個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。從以上分析可以看出, 把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期。把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍

因此static 這個說明符在不同的地方所起的作用是不同的。應予以注意。

彙總:(1)靜態區域性變數和全域性變數生命週期為整個源程式的週期,而動態的區域性變數為函式的生存週期;

(2)靜態的全域性變數作用範圍在該原始檔中,非靜態的全域性變數在的源程式中(包含多個原始檔);

相關推薦

static 靜態變數生命週期。-=---

靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也可以用static定義它為靜態自

當一個類被載入後,它的靜態變數生命週期是什麼,是整個應用程式執行結束(比如java web程式,從類載入到伺服器關閉還是該執行緒執行完畢)還是別的什麼?

靜態變數在記憶體中只有一個,JAVA虛擬機器載入類的時候為其分配記憶體,位於方法區,被類的所有例項共享,其生命週期取決於類的生命週期。。。當類被解除安裝。。。靜態變數也被銷燬 取決於類載入器。如果換了一個類載入器,這個

java 靜態變數生命週期(類生命週期

引言         最近有位細心的朋友在閱讀筆者的文章時,對java類的生命週期問題有一些疑惑,筆者開啟百度搜了一下相關的問題,看到網上的資料很少有把這個問題講明白的,主要是因為目前國內java方面的教材大多隻是告訴你“怎樣做”,但至於“為什麼這樣做”卻不多說,所以造成大家在基礎和原理方面的知識比較匱乏,

Java 靜態變數生命週期

Static: 載入:java虛擬機器在載入類的過程中為靜態變數分配記憶體。類變數:static變數在記憶體中只有一個,存放在方法區,屬於類變數,被所有例項所共享銷燬:類被解除安裝時,靜態變數被銷燬,並釋放記憶體空間。static變數的生命週期取決於類的生命週期類初始化順序: 靜態變數、靜態程式碼塊初始化

static靜態變數生命週期

靜態變數的型別說明符是static。靜態變數當然是屬於靜態儲存方式,但是屬於靜態儲存方式的量不一定就是靜態變數,例如外部變數雖屬於靜態儲存方式,但不一定是靜態變數,必須由 static加以定義後才能成為靜態外部變數,或稱靜態全域性變數。對於自動變數,它屬於動態儲存方式。但是也

Spring依賴注入static靜態變數相關問題

Spring依賴注入static靜態變數相關問題   版權宣告:本文為博主原創文章,轉載請註明出處,謝謝。 https://blog.csdn.net/rongxiang111/article/details/78881371 1.Spring不支援依賴注入static靜態變數

Java中static(靜態變數/方法)的優缺點

static關鍵字宣告的變數或方法稱為靜態變數/方法 靜態static變數/方法在類載入的過程中被初始化,在記憶體中只存在一份,所以可以把它當作是全域性變數/方法。 優點 屬於類級別的,不需要建立物件就可以直接使用. 全域性唯一,記憶體中唯一,靜態變數

static靜態變數

static靜態屬性和方法: 1、靜態方法在程式開始時載入到記憶體中,例項化方法使用是再載入 2、靜態方法不能呼叫非靜態方法 3、靜態方法無需例項化就可以直接呼叫,例項化方法需要先生成例項在通過例項呼叫方法, 雖然看來靜態方法比較快,但是他還是會佔用很多記憶體(即常駐記憶體) 4、靜態記憶體

static靜態變數-投票案例

1 public class Voter { 2 String name; //名字 3 private static int count; //投票數 4 5 public Voter() {} 6 7 public Voter(S

php static靜態變數詳解

什麼是static靜態變數?(以下為在C語言中的理解) 靜態變數 型別說明符是static。 靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區(在靜態儲存區內分配儲存單元),該 區域中的資料在整個程式的執行期間一直佔用這些儲存空間(在程式整個執行期間都不釋放),也可以認為是其記憶體地址不變,直到

PHP重置static靜態變數

                         

JAVA學習筆記 static(靜態變數 靜態方法)

一。程式碼 (1)public class statictest {public static void main(String args[]){ statictest tm=new statictest(); tm.printSxt(); int c=tm.add(30,40,50)+1000;

-1-2 java 面向物件基本概念 封裝繼承多型 變數 this super static 靜態變數 匿名物件 值傳遞 初始化過程 程式碼塊 final關鍵字 抽象類 介面 區別 多型 包 訪問許可權 內部類 匿名內部類 == 與 equal

java是純粹的面向物件的語言 也就是萬事萬物皆是物件 程式是物件的集合,他們通過傳送訊息來相互通訊 每個物件都有自己的由其他的物件所構建的儲存,也就是物件可以包含物件 每個物件都有它的型別  也就是類 某一特定型別的所有物件都可以接收相同的訊息,因為同一類事物有共同的特性 面向物件開發 •

static靜態變數使用@value注入

今天發現,注入的靜態屬性一直為null;我是這樣寫的:後來在網上查了下,發現@value不能直接注入值給靜態屬性,spring 不允許/不支援把值注入到靜態變數中;spring支援set方法注入,我們可以利用非靜態setter 方法注入靜態變數可以通過如下方法解決:@Comp

Spring不支援依賴注入static靜態變數

在springframework裡,我們不能@Autowired一個靜態變數,使之成為一個spring bean,例如下面這樣:@Autowired private static YourClass yourClass; 可以試一下,yourClass在這種狀態下不能夠被

標頭檔案中定義static靜態變數的利弊

對於儲存位置:靜態變數的效果和全域性變數的效果是一樣的,他們都儲存在全域性資料區。頻繁使用其實效率更高,如果定義的靜態變數不用,那就會浪費記憶體,因為全域性資料區生命週期是從程式執行到結束。 區域性變數:每次棧上都要為區域性變數分配空間,因此區域性變數太多

Android--慎用static靜態變數

Android是用Java開發,其靜態變數的生命週期遵守Java的設計。靜態變數是在類被load的時候分配記憶體的,並且存在於方法區。當類被解除安裝的時候,靜態變數被銷燬。在PC機的客戶端程式中,一個類被載入和解除安裝,可簡單的等同於jvm程序的啟動和結束。那麼在Andr

python學習筆記 --- 變數生命週期問題

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

在C語言中,static靜態變數,extern外部變數的區別

1:什麼是static static,叫做靜態變數。一般用於全域性變數裡面,首先,我們來考慮一下為什麼要用到static,我們可以想一下,一個專案其實是由很多位工程師一起來完成的,他們之間是互相獨立完成自己所要完成的一個模組的,這就有可能出現定義相同的全域性變數或者全域性函

static 靜態變數靜態程式碼塊的執行順序

        眾所周知 在android中static 修飾的會被稱之為 靜態常量,靜態變數, 靜態方法 ,還有就是靜態程式碼塊,用static{ // 程式碼塊 非static修飾的方法,變數,常量, 是不能再靜態程式碼塊中使用的 } 表示。        stati