1. 程式人生 > >java關鍵字之final關鍵字解析

java關鍵字之final關鍵字解析

在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來修飾,一旦宣告為final方法,則此方法不能夠被子類所重寫,但是可以過載。

注意:如果在父類中的final方法是用private修飾的,那麼子類中是可以有同名的方法的,但是這裡並不是重寫,因為private不能被子類繼承,所以其實是相當於在子類中有一個新的方法,恰好名字相同而已,這個方法是屬於子類的,而不是從父類繼承而來的。(注:private方法會被隱式的宣告為final) 當我們不想要子類對方法進行重寫時,通常會把方法宣告為final,此外final方法通常在效能上會比普通方法好一點。

3.修飾類

被final修飾的類是不可以被繼承的,常見的比如String類,他就是final類,是不可繼承的。使用final類的好處是他們的物件是隻讀的,可以在多執行緒下安全的共享,不用額外的同步開銷等。

注意:final類的所有方法都被隱式的宣告為final方法。

總結

1.修飾變數:只會賦值一次,不會被修改。成員變數必須賦初值。 2.修飾方法:不能被重寫,可以被過載。 3.修飾類:不能被繼承。