平時工作中static關鍵字出現的地方挺多的,但是要我說出他們的用法跟區別我還真不知道怎麼說,這裡系統性的整理下。
1、修飾函式的區域性變數:
特點:有預設值0,只執行一次,執行一開始就開闢了記憶體,記憶體放在全域性
2、修飾全域性函式和全域性變數:
特點:只能在本原始檔使用
3、修飾類裡面的成員變數:
特點:和1差不多,定義多個static y,但只有乙個y,不進入類的大小計算,不依賴於類物件的存在而存在(可直接呼叫,要進行外接宣告)
4、修飾類的成員函式:
特點:f():括號裡無this指標,只能呼叫他的本類靜態函式和他的靜態變數,即是用static修飾過的不依賴於類物件的存在而存在(可不進行外接宣告,直接呼叫)
5、修飾類:
特點:static修飾的類只能為內部類,普通類無法用static關鍵字修飾。static修飾的內部類相當於乙個普通的類,訪問方式為(new 外部類名.內部類的方法() )
擴充套件資料:
static的主要使用情況:
1、static方法
static方法一般稱作靜態方法,由於靜態方法不依賴於任何物件就可以進行訪問,因此對於靜態方法來說,是沒有this的,因為它不依附於任何物件,既然都沒有物件,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變數和非靜態成員方法,因為非靜態成員方法/變數都是必須依賴具體的物件才能夠被呼叫。
但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變數,但是在非靜態成員方法中是可以訪問靜態成員方法/變數的。
2、static變數
static變數也稱作靜態變數,靜態變數和非靜態變數的區別是:靜態變數被所有的物件所共享,在記憶體中只有乙個副本,它當且僅當在類初次載入時會被初始化。
而非靜態變數是物件所擁有的,在建立物件的時候被初始化,存在多個副本,各個物件擁有的副本互不影響。static成員變數的初始化順序按照定義的順序進行初始化。
3、static**塊
static關鍵字還有乙個比較關鍵的作用就是 用來形成靜態**塊以優化程式效能。static塊可以置於類中的任何地方,類中可以有多個static塊。
在類初次被載入的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。為什麼說static塊可以用來優化程式效能,是因為它的特性:只會在類載入的時候執行一次。
總結:
static修飾的類、方法、變數、靜態塊會在類別被初次載入的時候執行,且只執行一次。
用來修飾成員變數,將其變為類的成員,從而實現所有物件對於該成員的共享;
用來修飾成員方法,將其變為類方法,可以直接使用「類名.方法名」的方式呼叫,常用於工具類;
類載入順序:
繼承關係:父類靜態-->子類靜態-->父類構造-->子類構造-->父類方法-->子類方法
引用關係:主類靜態-->成員變數靜態-->成員變數構造-->主類構造
關於static關鍵字作用詳解
c語言的static關鍵字有兩種用途 1.在函式內部使用,被static修飾變數的區域性變數,可從兩方面去理解 生命週期和可見性 1 宣告週期 按理來說,區域性變數會隨著他所在的函式的執行完而銷毀,即區域性變數存在的必要條件是所處載體 函式 存在。但是如果你用static修飾該區域性變數,你會發現其...
static關鍵字的作用
static關鍵字是c,c 中都存在的關鍵字,它主要有三種使用方式,其中前兩種在c c 語言中使用,第三種只在c 中使用 c,c 中具體細微操作不盡相同,本文以c 為準 1 區域性靜態變數 2 外部靜態變數 函式 3 靜態資料成員 成員函式 下面就這三種使用方式及注意事項分別說明 一 區域性靜態變數...
關鍵字static的作用
關鍵字static的作用是什麼?這個簡單的問題很少有人能回答完全。在c語言中,關鍵字static有三個明顯的作用 1在函式體,乙個被宣告為靜態的變數在這一函式被呼叫過程中維持其值不變。2 在模組內 但在函式體外 乙個被宣告為靜態的變數可以被模組內所用函式訪問,但不能被模組外其它函式訪問。它是乙個本地...