一. static——把對象相關的變成類相關的,可以修飾屬性、方法、代碼塊。
1.static修飾屬性(類變量)
此屬性可以用 “ 類名.屬性名 ”進行通路,也就是說此屬性成為本類的類變量,為本類所共享。
static int a——類變量;與int a——成員變量;(有static修飾的屬性和沒有static修飾的屬性的差別)的差別:
①成員變量----記憶體配置設定時機:建立執行個體的時候;在記憶體中位置:堆中,彼此獨立;通路方式:隻能通過對象通路。如下:成員變量不能被“類名.變量名”通路,類變量可以
②類變量---記憶體配置設定時機:類加載的時候,在記憶體中位置:方法區,所有執行個體共享;通路方式:可以通過對象通路,也可以通過類名直接通路(推薦).如下圖:
2.static修飾方法——類方法
①類方法:同一類中,靜态方法隻能通路靜态資源(方法和屬性),類與類之間可以通過對象通路,也可“類名.方法名”直接通路。靜态方法不能使用this和super。
②成員方法:同一個類中,成員方法可以通路類中的所有方法和屬性;類與類之間全部通過執行個體來通路。
從上圖可以看出,
從上圖可以看出對象執行個體化的順序:
父類static屬性--父類static語句塊--子類static屬性--子類static語句塊--父類語句塊--父類構造器--父類初始化屬性--子類初始化屬性--子類語句塊--子類構造器
靜态方法是否能夠重寫?
同名靜态方法調用哪個不是取決于對象的實際類型,而是看引用的類型,所有靜态方法不能被看做重寫。