static和類變數與物件初始化載入時機
阿新 • • 發佈:2018-11-12
1.static修飾的範圍
使用範圍:在Java類中,可用static修飾屬性、方法、程式碼塊、內部類
被修飾後的成員具備以下特點:
隨著類的載入而載入
優先於物件存在
修飾的成員,被所有物件所共享
訪問許可權允許時,可不建立物件,直接被類呼叫
2.類變數(class Variable)
當static修飾屬性時,叫類變數(類屬性(class Variable))由該類的所有例項物件共享
3.類方法(class Method)
static修飾方法,是類方法(class Method) 1.沒有物件的例項時,可以用類名.方法名()的形式訪問由static標記的類方法。 2.在static方法內部只能訪問類變數與類方法(類的static屬性和靜態方法),不能訪問類的例項變數和 成員方法(非static屬性和方法). 3.因為不需要例項就可以訪問static方法,因此static方法內部不能有this。(也不能有super ? YES!) 4.過載的方法需要同時為static的或者非static的。 5.static修飾的方法不能被重寫 (重寫方法的目的是為了多型,或者說:重寫是實現多型的前提,即重寫是發生在繼承中且是針對非static方法的,多型針對於父子 物件之間的方法呼叫,而static是類名呼叫)
bstract修飾方法,子類需要重寫去實現,主要用於各個子類的例項物件;
static修飾方法,則方法不屬於某個物件,屬於class,可用class名.方法名(),進行呼叫
4.靜態與非靜態的訪問原則(☆)
同一個類中:
(1)直接訪問
(2)靜態成員中不能訪問非靜態的成員
非靜態成員中可以訪問靜態成員
不同類中:
(1)訪問其他類的靜態成員使用“類名.靜態成員”的格式
(2)訪問其他類的非靜態成員使用“物件.非靜態成員”的格式
5.類的成員之四:程式碼塊
初始程式碼塊:一般來說是用於類或例項成員變數的初始化,分為靜態程式碼塊和非靜態程式碼塊(構造程式碼塊)。
構造塊
非靜態程式碼塊:
隨著物件的建立而載入,每建立一個物件,就執行一次
優先於構造器執行
(2)可以為例項變數(非靜態的屬性)初始化
當多個構造器中共同的初始化部分會提取到構造塊中
靜態程式碼塊
隨著類的載入而載入,只執行一次
靜態程式碼塊優先於構造塊執行
可以為類變數(靜態的屬性)初始化
在靜態程式碼塊中不能訪問非靜態成員
載入時機: