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...