關於final關鍵字,大家都蠻熟悉的了,這次我來講一下我對final的理解。
final是用來修飾成員變數的乙個關鍵字,被他修飾的成員變數在賦值之後就不能再重新賦值,因此被修飾的成員變數要顯式地為其賦值,系統不會為final變數設定預設初始值,因為這樣final關鍵字就沒有意義了。
成員變數按照所有者可以分為類變數(靜態變數)和例項變數兩種,因此我們要從兩種情況來分析final的使用。在類變數中,只能在靜態初始化塊或宣告變數時賦初值;而例項變數可以在非靜態初始化塊、宣告變數時或構造器中賦初值。我們來看一段**:
public class finaltest
//在靜態初始化塊裡賦初值
static
//在構造器裡賦初值
public finaltest()
}
這裡我們可以看到只要符合條件,可以在兩種情況裡所列出的地方來給final變數賦初值。
用於區域性變數和方法形參
在區域性變數和方法形參裡都能用final關鍵字來修飾變數,在修飾區域性變數時,可以在申明變數或者之後再賦初值;而用於方法形參中則表示方法裡不能再更改傳進來的引數了,可以防止一些不必要的錯誤。在剛才的類裡面加上如下**:
//如果在方法裡面給x賦值就會報錯
public void ***(final int x)
public static void main(string args)
用於引用型別變數
final在修飾基本型別變數時,一旦給基本型別變數賦值後就不能再更改。但在修飾引用型別變數時只保證引用物件的位址不變,物件是可以改變的,即比如你引用了乙個人的物件,這個人是不能變的,但他的體重、年齡等屬性是可以改變的。照例上**:
class person
public string getname()
public void setname(string name)
}public class ***test
}
這裡a是引用了person類的、用final修飾的物件,因此我們不能再改變這個物件的引用,但裡面的一些屬性是可以作出修改的。
final修飾方法和類
final修飾的方法不能被子類重寫,但可以過載。你能夠在子類寫乙個和父類被final修飾的方法一樣的方法,但這個方法與父類的那個方法並沒有關係。
當你不想要你的類有子類的時候,你可以用final來修飾這個類。
參照:
Java基礎 final關鍵字
final概述 final可以修飾類,方法和變數。特點 1 final可以修飾類,該類不能被繼承。2 final可以修飾方法,該方法不能被重寫。3 final可以修飾變數,該變數不能被重新賦值。因為這個變數為常量。final修飾區域性變數的問題package duixiang class stude...
JAVA基礎(關鍵字 final)
1,final概述 2,final修飾特點 class demo1 final final class father class son extends father 3,final關鍵字修飾區域性變數 基本型別,是值不能被改變 引用型別,是位址值不能被改變,物件中的屬性可以改變 class dem...
java基礎之final關鍵字
與final關鍵字相關的筆試題面試題也是一道必考題。而且對於final的實際應用非常廣泛,在 設計的時候,如果對此不夠足夠掌握,可能就會很難排查與此相關的異常。final的理論知識如下 final 型別的成員變數初始化值 1 宣告時候直接賦值 2 構造方法中賦值,如果乙個類中有多個構造方法,就要保證...