Java物件導向(三)Static

2021-08-08 05:20:09 字數 3812 閱讀 8510

static本身是乙個修飾符,可以修飾變數、方法、**塊、內部類。

一、static修飾變數 --- 靜態變數

static修飾 變數後這個變數稱之為靜態變數或類變數。

靜態變數隨著類的加而載入到方法去中的靜態區,並且在靜態區中自動賦予初始值。

由於靜態變數是先於物件存在的,所以靜態變數可以 有物件呼叫,也可由類名呼叫。

由於該類 建立的所有物件儲存的是靜態屬在靜態區中的位址,所以晶太屬性是被所有物件所共享的

問:

1. 靜態變數可以定義在函式中麼?

解: 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

2. 在構造方法中可以定義靜態變數麼?

解; 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

3. 在構造**塊中能初始化靜態變數麼?

解: 可以

靜態變數先被載入,在物件建立時執行構造**塊,靜態變數被初始化。

4. 可以用this來呼叫靜態變數麼?

解: 可以

this是當前活躍物件的引用,靜態變數可以由物件後者類呼叫,所以this可以呼叫靜態變數。

二、靜態方法

static修飾方法可以稱之為靜態方法或類方法。

靜態方法是隨著類的載入被載入到方法區中的靜態區。

靜態區中的元素不屬於某乙個物件,而是歸屬於類。

靜態方法是屬於類的,可以通過類呼叫,也可以通過物件呼叫。

例: system.arraycopy() 、 arrays.sort() 、arrays.tostring()

system.out.println() 不是靜態方法   ,out是乙個物件

問:

1. 靜態方法中可以定義靜態變數麼? 

解: 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

2. 靜態方法中可以直接呼叫本類的非靜態函式麼?

解: 不可以

任何非靜態的函式或屬性都需要通過物件來呼叫。而靜態的屬性或函式只需要類就可以呼叫。當通過類呼叫含有非靜態函式的靜態函式時,非靜態函式沒有被物件呼叫卻要執行,產生矛盾!

3. 靜態函式可以過載麼?

解: 可以

過載要求方法名一致,引數列表不同,與static無關。

但不是真正意義上的 過載。

4. 主函式中可以使用this麼?

解: 不可以

this相當於當前活躍物件的引用,而主函式執行是沒有物件,所以矛盾。

5. 靜態函式可以重寫麼?

解: 不可以

多型針對的是物件中的方法,從物件的層面來看,而靜態是從類的層面來看的。

6. 父子類中可以存在方法簽名一致的方法麼?

解: 可以

父類有static修飾,子類也必須有static修飾。

靜態看的是宣告類,非靜態看的是實現類。

父子類中存在了方法簽名一致的方法的時候,要麼都是靜態,要麼都是非靜態。

三、靜態**塊

在類內 用static --- 靜態**塊

建立子類時執行順序: 父類靜態---> 子類靜態 ----> 父類非靜態 ---->子類非靜態   (規律: 靜態優先於非靜態,父類優先於子類)

類載入的時候執行,實際上靜態**塊是隨著類載入而載入到靜態區,在類建立物件或者執行方法之前執行一次。而且只執行一次,後續不再執行。

static本身是乙個修飾符,可以修飾變數、方法、**塊、內部類。

一、static修飾變數 --- 靜態變數

static修飾 變數後這個變數稱之為靜態變數或類變數。

靜態變數隨著類的加而載入到方法去中的靜態區,並且在靜態區中自動賦予初始值。

由於靜態變數是先於物件存在的,所以靜態變數可以 有物件呼叫,也可由類名呼叫。

由於該類 建立的所有物件儲存的是靜態屬在靜態區中的位址,所以晶太屬性是被所有物件所共享的

問:

1. 靜態變數可以定義在函式中麼?

解: 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

2. 在構造方法中可以定義靜態變數麼?

解; 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

3. 在構造**塊中能初始化靜態變數麼?

解: 可以

靜態變數先被載入,在物件建立時執行構造**塊,靜態變數被初始化。

4. 可以用this來呼叫靜態變數麼?

解: 可以

this是當前活躍物件的引用,靜態變數可以由物件後者類呼叫,所以this可以呼叫靜態變數。

二、靜態方法

static修飾方法可以稱之為靜態方法或類方法。

靜態方法是隨著類的載入被載入到方法區中的靜態區。

靜態區中的元素不屬於某乙個物件,而是歸屬於類。

靜態方法是屬於類的,可以通過類呼叫,也可以通過物件呼叫。

例: system.arraycopy() 、 arrays.sort() 、arrays.tostring()

system.out.println() 不是靜態方法   ,out是乙個物件

問:

1. 靜態方法中可以定義靜態變數麼? 

解: 不可以

靜態變數需要在類被載入的時候載入並被初始化,但是定義在函式中隨著類的載入被載入到方法區,並沒有被執行,所以靜態變數不能被載入。

2. 靜態方法中可以直接呼叫本類的非靜態函式麼?

解: 不可以

任何非靜態的函式或屬性都需要通過物件來呼叫。而靜態的屬性或函式只需要類就可以呼叫。當通過類呼叫含有非靜態函式的靜態函式時,非靜態函式沒有被物件呼叫卻要執行,產生矛盾!

3. 靜態函式可以過載麼?

解: 可以

過載要求方法名一致,引數列表不同,與static無關。

但不是真正意義上的 過載。

4. 主函式中可以使用this麼?

解: 不可以

this相當於當前活躍物件的引用,而主函式執行是沒有物件,所以矛盾。

5. 靜態函式可以重寫麼?

解: 不可以

多型針對的是物件中的方法,從物件的層面來看,而靜態是從類的層面來看的。

6. 父子類中可以存在方法簽名一致的方法麼?

解: 可以

父類有static修飾,子類也必須有static修飾。

靜態看的是宣告類,非靜態看的是實現類。

父子類中存在了方法簽名一致的方法的時候,要麼都是靜態,要麼都是非靜態。

三、靜態**塊

在類內 用static --- 靜態**塊

執行順序: 父類靜態---> 子類靜態 ----> 父類非靜態 ---->子類非靜態

Java物件導向 static

static 靜態的 屬於物件的屬性和方法是動態的,相反屬於類的就是靜態的。靜態的用途 修飾類的成員變數,稱為靜態變數,靜態變數是屬於類的變數,可以使用 類名.變數名 訪問,在類的內部可以省略類名。靜態變數只有乙份,可以被全體物件共享!軟體中只有乙份的資料應該使用static修飾。靜態變數在類載入期...

Java物件導向3 this 和static

this 在類方法定義中使用this關鍵字代表使用該方法的物件的引用。當必須指出當前使用方法的物件是誰時要使用this。有時使用this可以處理方法中成員變數和引數重名的情況。this可以看作是乙個變數,它的值是對當前物件的引用。public class leaf leaf increament v...

static之物件導向

一 靜態資料成員子 includeusing namespace std class point int point num 0 定義靜態資料成員 int main 對於類的非靜態資料成員,每個類物件都有自己的拷貝。而對於靜態資料成員被當作是類的成員。就像上述例子中,雖然定義了4個物件,但是靜態資料...