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