Java final和static關鍵字

2021-08-20 08:46:39 字數 2996 閱讀 4416

繼承的出現提高了**的復用性,並方便開發。但是,有些類在描述完之後,不想被繼承,或者有些類中的部分方法功能是固定的,不想讓子類重寫。可是當子類繼承了這些特殊類之後,就可以對其中的方法進行重寫,這怎麼辦呢?

要解決上面的問題,需要用到關鍵字final,final意思是最終,不可變。

final是個修飾符,它可以修飾類,類的成員,以及區域性變數。

class

yy {}

final

class

fuextends

yy{} //可以繼承yy類

final

class

fu{}

class

ziextends

fu{} //fu是final類,不能繼承fu類

class

fu public

void method2(){}

}class

ziextends

fu }

final

int i = 20;

i = 30; //賦值報錯,final修飾的變數只能賦值一次

final person p = new person();

person p2 = new person();

p = p2; //final修飾的變數p,所記錄的位址值不能改變

p.name = "小明";//可以更改p物件中name屬性值

注: p不能為別的物件,而p物件中的name或age屬性值可更改。

class demo 

//如果在setter方法中進行賦值,則報錯,因為setter方法是建立物件後呼叫的,此時final修飾的成員變數不能再進行賦值了

}

當在定義類的時候,類中都會有相應的屬性和方法。而屬性和方法都是通過建立本類物件呼叫的。當在呼叫物件的某個方法時,這個方法沒有訪問到物件的特有資料時,方法建立這個物件有些多餘。可是不建立物件,方法又呼叫不了,這時就會想,那麼我們能不能不建立物件,就可以呼叫方法呢?

我們可以通過static關鍵字來實現。static它是靜態修飾符,一般用來修飾類中的成員。

注:被static修飾的變數不再屬於物件的特有內容,而是變成變數的共享內容。

被static修飾的成員變數屬於類,不屬於這個類的某個物件。(也就是說,多個物件在訪問或修改static修飾的成員變數時,其中乙個物件將static成員變數值進行了修改,其他物件中的static成員變數值跟著改變,即多個物件共享同乙個static成員變數)

class demo 

class test

}

被static修飾的成員可以並且建議通過類名直接訪問。

訪問靜態成員的方式:

類名

.靜態成員變數名類名.

靜態成員方法名(引數)

物件名.

靜態成員變數名--

----

不建議使用該方式,會出現警告

物件名.

靜態成員方法名(引數)--

----

不建議使用該方式,會出現警告

class demo 

}class test

}

**如下:

class

person

class

test

}

1、類進入方法區後,先載入自己的靜態成員,靜態成員屬於自己的類

2.、person.class要進入方法區中,然後先載入自己的靜態成員。之後,person類和靜態成員也要進入靜態區。注意,靜態成員進入靜態區也有預設值。

上面就是類進入方法區之後的變化,接下來程式就可以執行了。

3.、程式開始執行,執行main方法,jvm到靜態區將main方法複製乙份壓棧執行

注意:記憶體中,靜態優於非靜態存在的

4.、new乙個person類的物件,jvm在堆記憶體中開闢一塊記憶體位址

1、靜態內容是優先於物件存在,只能訪問靜態,不能使用this/super。靜態修飾的內容存於靜態區。

class demo 

}

2、同乙個類中,靜態成員只能訪問靜態成員

class demo 

}

3、main方法為靜態方法僅僅為程式執行入口,它不屬於任何乙個物件,可以定義在任意類中。

開發中,我們想在類中定義乙個靜態常量,通常使用public static final修飾的變數來完成定義。

定義格式:

public

static

final 資料型別 變數名 = 值;

當我們想使用類的靜態成員時,不需要建立物件,直接使用類名來訪問即可。

類名.變數名//訪問該靜態變數

java final修飾main函式

主函式最常見寫法 public static void main string args system.out.println str 如果寫成 public void main string args system.out.println str 編譯通過 執行出錯,沒有主方法 寫下下面的 pub...

java final變數 方法 類

final資料 class value class finaldata public final int valueone 9 public static final int value two 99 public static final int value three 39 public fin...

Java final 許可權 內部類

final代表最後的,最終的 可以用來修飾,類 方法 變數 被final修飾的類,不能被繼承,太監了 不能有子類 final不能和abstract共用 不能被子類覆蓋重寫,但是可以過載 區域性變數 定義引數的位置,方法中的變數,靜態 塊 一旦賦值就不能再賦值,即使賦值相同 成員變數在類中方法外 成員...