1. 程式人生 > >static和類變數與物件初始化載入時機

static和類變數與物件初始化載入時機

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)可以為例項變數(非靜態的屬性)初始化

    當多個構造器中共同的初始化部分會提取到構造塊中

靜態程式碼塊

   

隨著類的載入而載入,只執行一次
靜態程式碼塊優先於構造塊執行
可以為類變數(靜態的屬性)初始化
在靜態程式碼塊中不能訪問非靜態成員

載入時機: