java關鍵字之final關鍵字解析
阿新 • • 發佈:2019-02-15
在java中,final關鍵字和static關鍵字一樣,都可以用來修飾類,方法,成員變數,通常可以用來改善應用程式的效能,但是final強調的是“不可變性”。
1.修飾變數
final關鍵字可以用來修飾成員變數和方法中的變數。當一個數據被final和static同時修飾時,我們通常把它稱為常量。 final的不可變性表現在:被final修飾的變數只能夠進行一次賦值操作。如圖所示,當變數第一次被賦值後,就不可以在對其進行更改。 成員變數和方法中的變數有點區別,成員變數必須要進行初始化,而方法中的變數則不必。
對於在修飾成員變數時,只有3種情況可以對它進行賦值。 1.在宣告時就進行賦值
2.在構造方法中進行賦值
3.將其加上static修飾符後,可以在static程式碼塊中進行賦值
注意:對於基本資料型別來說,被final修飾後,指的是它的值不會發生改變,對於引用型別來說,被final修飾後指的是它的引用物件不會發生改變(即只能指向最初賦值的那個物件,不能夠再更改),但是它引用的這個物件本身是可以改變的,因為引用的其實是一個地址,而這個地址雖然不會變,但地址中的內容可能會變。
class People{ private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }
public class Test{
public static void main(String[] args) {
final People people = new People();
people.setName("張三");
people.setAge(18);
System.out.println(people.getName());
System.out.println(people.getAge());
}
}
最後,由於final在一次賦值後就不會改變,所以如果在編譯時就明確知道其值的話,編譯器就會把它當做常量來處理,進行相應的優化,可以提高程式效率。
2.修飾方法
注意:如果在父類中的final方法是用private修飾的,那麼子類中是可以有同名的方法的,但是這裡並不是重寫,因為private不能被子類繼承,所以其實是相當於在子類中有一個新的方法,恰好名字相同而已,這個方法是屬於子類的,而不是從父類繼承而來的。(注:private方法會被隱式的宣告為final) 當我們不想要子類對方法進行重寫時,通常會把方法宣告為final,此外final方法通常在效能上會比普通方法好一點。
3.修飾類
被final修飾的類是不可以被繼承的,常見的比如String類,他就是final類,是不可繼承的。使用final類的好處是他們的物件是隻讀的,可以在多執行緒下安全的共享,不用額外的同步開銷等。
注意:final類的所有方法都被隱式的宣告為final方法。