Java中final和static的區別

2021-06-14 12:17:50 字數 1225 閱讀 6042

1.final和static變數:

1.1. final只能在類中定義時或者在構造器中進行初始化,且只能使用一種方法,屬於物件。不同物件可以有不同的值,一旦賦值之後則不允許修改。

static可在類中定義、構造器、或者通過類名.變數名(物件.變數名)的方式賦值,即可以修改,但修改後所有物件對應的該變數值均相等。二者都在靜態儲存區。

final修飾的類屬性(field)、例項屬性、區域性屬效能指定初始值的地方:

1)類屬性:必須在類的靜態初始化塊或宣告該屬性時指定初始值。

2)例項屬性:必須在非靜態初始化塊、宣告該屬性或構造器中指定初始值。

3)區域性屬性:區域性變數中的屬性必須由程式設計師顯示初始化,形參中的final屬性不能修改其值。

1.2. 當final修飾引用型別變數時,該引用的物件所引用的位址不可變,即一直指向同乙個物件,但該物件中的屬性內容可以改變。

static只能修飾類屬性或方法。

1.3. 可執行「巨集替換」的final變數

條件:1)使用final修飾

2)在定義時指定了初始值。

3)該初始值在編譯時就可確定下來。

例如:1)在方法中定義

final int a=5;//即可作為巨集替換使用。

2)若被賦值的表示式只是基本算術表示式或者字串連線,沒有訪問普通變數或者呼叫方法,則同樣可作為巨集替換使用。如:

final string s1="zhang"+88;//可直接將s1認為是「zhang88」,即s1=="zhang88";

final string s2="zhang"+string.valueof(88);//呼叫了string的valueof()方法,不能將s2作為巨集替換。若使用==,則時s2!="zhang88"。

2.方法:

fianl:不允許其子類覆蓋該方法。

static:只能訪問所屬類的static成員變數和成員方法以及一些基本資料型別變數。private成員都隱式地指定為final,即不讓子類訪問。

3.修飾類時:

final:說明不能定義該類的子類。因為此時預設的成員方法全為final

static:不能修飾外部類,但可以定義靜態內部類,可以把乙個類隱藏在另乙個類的內部,以便取消賦值時產生的引用。

4.什麼時候定義靜態函式/靜態變數?

當物件中出現共享資料時,該資料被靜態所修飾。(物件中的特有資料要定義成非靜態存在於堆記憶體中)

當功能內部沒有訪問到非靜態資料(物件的特有資料),那麼該功能可以定義為靜態的。

Java中final的用法

final類不能被繼承,沒有子類,final類中的方法預設是final的。final方法不能被子類的方法覆蓋,但可以被繼承。final不能用於修飾構造方法。final成員變數表示常量,只能被賦值一次,賦值後值不再改變。1 final類 final類不能被繼承,因此final類的成員方法沒有機會被覆蓋...

JAVA中final修飾引數

1 final 修飾在變數上,說明這個變數的值不能修改 final 修飾在方法上,說明這個方法在繼承後不能覆蓋.final 修飾在類上,說明這個類為終態,不能被繼承了.2 final型別修飾的引數分為兩種型別 基本型別 與 引用型別 參考 1 在呼叫的引數內部,無論是基本型別還是引用型別,其值不可改...

java中的final如何使用和理解

1 final類 不能被繼承,因此 final類 的成員方法沒有機會被覆蓋,預設都是final的。在設計類時候,如果這個類不需要有子類,類的實現細節不允許改變,並且確信這個類不會再被擴充套件,那麼就設計為 final類 final方法不能被子類的方法覆蓋,但可以被繼承。public class te...