靜態變數和非靜態變數的區別

2021-09-25 12:07:57 字數 649 閱讀 4335

記憶體分配:

靜態變數在應用程式初始化(被裝載)時,就存在於記憶體當中,直到它所在的類的程式執行結束時才消亡;

而非靜態變數需要被例項化後才會分配記憶體。

生存週期 :

靜態變數生存週期為應用程式的存在週期;

非靜態變數的存在週期取決於例項化的類的存在週期。

呼叫方式 :

靜態變數只能通過「類.靜態變數名」呼叫,類的例項不能呼叫;

非靜態變數當該變數所在的類被例項化後,通過例項化的類名直接訪問。

共享方式 :

靜態變數是全域性變數,被所有類的例項物件共享,即乙個例項的改變了靜態變數的值,其他同類的例項讀到的就是變化後的值;

非靜態變數是區域性變數,不共享的。

訪問方式 :

靜態成員不能訪問非靜態成員; 

非靜態成員可以訪問靜態成員。

附:靜態建構函式:

用於對靜態字段、唯讀欄位等的初始化。

新增static關鍵字,不能新增訪問修飾符,因為靜態建構函式都是私有的。

乙個類只能有乙個靜態建構函式。

無引數的建構函式可以與靜態建構函式共存。儘管引數列表相同,但乙個屬於類,乙個屬於例項,所以不會衝突。

如果沒有寫靜態建構函式,而類中包含帶有初始值設定的靜態成員,那麼編譯器會自動生成預設的靜態建構函式。

靜態變數 非靜態變數的區別

c 變數根據定義位置的不同,具有不同的作用域,作用域可分為6種 全域性作用域,區域性作用域,語句作用域,類作用域,命名作用域和檔案作用域。從作用域看 全域性變數具有全域性作用域。全域性變數只需在乙個原始檔中定義,就可以作用於所有的原始檔。當然,其他不包括全域性變數定義的原始檔需要用extern關鍵字...

靜態變數和非靜態變數

class string1 a和b編譯報錯,can not make a static referrence to no static filed s3,s4 分析 string s1 pingguo string s2 xiangjiao string s3 new string lizi str...

靜態變數,非靜態變數和final變數

package com.founder.bg.quartz.job 7 在程式執行時的區別 例項變數屬於某個物件的屬性,必須建立了例項物件,8 其中的例項變數才會被分配空間,才能使用這個例項變數。靜態變數不屬於某 9 個例項物件,而是屬於類,所以也稱為類變數,只要程式載入了類的位元組碼,10 不用建...