static可以被重新賦值嗎 靜態(tài)變量不是不能被重新初始化賦值嗎?
靜態(tài)變量不是不能被重新初始化賦值嗎?靜態(tài)變量只存在于本地函數(shù)域中,但當(dāng)程序執(zhí)行離開此域時,它們的值不會丟失。聲明方法是:static$name=value,其中static是聲明靜態(tài)變量的關(guān)鍵字,$n
靜態(tài)變量不是不能被重新初始化賦值嗎?
靜態(tài)變量只存在于本地函數(shù)域中,但當(dāng)程序執(zhí)行離開此域時,它們的值不會丟失。聲明方法是:static$name=value,其中static是聲明靜態(tài)變量的關(guān)鍵字,$name是變量的名稱,value是變量的值。&是嗎?Phpfunctiontest(){static$AA=0echo$AA$AA}?>變量$AA在第一次調(diào)用test()函數(shù)時初始化。每次調(diào)用test()函數(shù)時,都會輸出$AA的值并加上1
當(dāng)一個類的數(shù)據(jù)成員聲明為static時,靜態(tài)數(shù)據(jù)成員只能定義一次并由同一個類的所有對象共享。每個對象都有類中每個普通數(shù)據(jù)成員的一個副本,但靜態(tài)數(shù)據(jù)成員只存在一個實(shí)例,而不管定義了多少個類對象。靜態(tài)數(shù)據(jù)成員的目的之一是統(tǒng)計(jì)實(shí)際存在的對象數(shù)。靜態(tài)數(shù)據(jù)成員不能在類中初始化。實(shí)際上,類定義只用于描述對象的藍(lán)圖,其中不允許指定初始值。無法在函數(shù)中初始化靜態(tài)數(shù)據(jù)成員,因?yàn)殪o態(tài)數(shù)據(jù)成員由類的所有對象共享,因此每次創(chuàng)建類的對象時,都會重新初始化靜態(tài)數(shù)據(jù)成員。
為什么靜態(tài)成員變量要通過類外初始化賦值?
Java變量的初始化順序如下:父靜態(tài)變量、父靜態(tài)代碼塊、子類靜態(tài)變量、子類靜態(tài)代碼塊、父非靜態(tài)變量、父非靜態(tài)代碼塊、父構(gòu)造函數(shù)、子類非靜態(tài)變量、子類非靜態(tài)代碼塊、子類構(gòu)造函數(shù)。R您可以觀察以下程序的執(zhí)行情況:[R
程序輸出:[R]最近,我們在工作過程中遇到了一個錯誤。我們發(fā)現(xiàn)Java變量的初始化順序并不像上面那樣簡單。讓我們修改類A和類B程序輸出。[R] 可以發(fā)現(xiàn),靜態(tài)塊和靜態(tài)變量的初始化順序與其聲明的位置有關(guān)。首先執(zhí)行第一個聲明,然后執(zhí)行普通塊和普通變量的初始化順序。右