static為什麼能和final一起來使用?

2022-02-01 07:17:36 字數 767 閱讀 4275

二者表示的意義不同

static修飾的物件靜態的,可以通過類名或者類物件來對其進行訪問和修改

final修飾的物件表示常量,只能夠被賦值一次

如:static final int a=1; //a為常量

static int b=2; //可以多次被賦值

再如:當在類中建立乙個類的物件時,會將該類的成員方法和變數都會在記憶體copy乙份,如果建立對個物件明顯會比較占用記憶體(前提是物件沒有獨享這些成員的必要);

如果這是在類中定義了乙個static變數,那麼這個變數在記憶體中只能有乙份拷貝,建立的物件可以共享該記憶體中的值(互相影響,互相改變),而如果是想這份共享記憶體中的值不可改變,可加final來進行修飾

static int b=1; //乙份拷貝

final int c=2; //如果有多個例項,每個例項都會分別儲存final修飾的變數,且隨著程式的執行,記憶體會不斷地分配與釋放(如銷毀物件時)

final static int d=3;//只有乙份拷貝,多個例項共享,且屬性為唯讀,會一直占用記憶體,直到程式的終止

對於一些常量或者字串等等,一般建議寫成static final型別(節省空間)

但須注意一點:final,static不能喝abstract同時來修飾變數和方法

如:public abstract int area(); //對的

public static abstratc int area(); //錯的

ain函式為什麼要static

假設沒有static關鍵字,那意味著需要用生成乙個例項後才可以呼叫這個 ain方法,而 ain方法是程式入口點,你沒有進入 ain方法,自然無法生成乙個例項,既然沒有例項,那就無法呼叫 ain函式,豈不矛盾?所以 ain函式被設定為static.main 函式在c 裡非常特殊,它是編譯器規定的所有可...

php中為什麼要用static方法

static全域性變數和普通全域性變數,static區域性變數和普通區域性變數,static函式與普通函式的區別?下面本文將一一為你解答。1 全域性變數 外部變數 的說明之前再冠以static 就構成了靜態的全域性變數。全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。這兩者在儲存...

為什麼static函式不能為virtual

首先什麼是static靜態成員函式?靜態成員函式不屬於類中的任何乙個物件和例項,屬於類共有的乙個函式。也就是說,它不能用this指標來訪問,因為this指標指向的是每乙個物件和例項。對於virtual虛函式,它的呼叫恰恰使用this指標。在有虛函式的類例項中,this指標呼叫vptr指標,指向的是v...