天天看點

java中final修飾符,修飾變量、方法、類的詳細用法

final可以用來修飾變量(包括類屬性、對象屬性、局部變量和形參)、方法(包括類方法和對象方法)和類。

1, final 修飾變量:

final修飾的變量表示此變量是“最後的、最終的”含義。一旦定義了final變量并在首次為其顯示初始化後,final修飾的變量值不可被改變。

是以,final修飾變量時就成了 常量(一旦指派不能改變)

常量名一般要全部大寫;

final int  BOY = 1;
           

這裡需要注意以下幾個問題:

  1. final修飾的變量,無論是類屬性、對象屬性、形參還是局部變量,這些變量都是需要進行顯示初始化(即為其顯示指定初始值)。對于final屬性來講,系統不會提供預設值,

對于final修飾的形參,由于是實參傳遞過來的,很好了解。

對于final修飾的局部變量,與未用final修飾的變量一樣,都是需要顯示初始化。即局部變量都是需要顯示初始化的。

對于一般的類屬性和對象屬性,由類和對象的初始化過程中可以看出,首先都進行了預設初始化。然後對有顯示指派的變量才再進行顯示初始化。

但對final修飾的類屬性和對象屬性而言,如果不顯示初始化,其預設将是進行預設初始化後的值,這與final本身出發點沖突,

是以,Java文法規定:

final修飾的類屬性和變量屬性必須要進行顯示初始化指派。

另外,無論對于基本資料類型還是引用資料類型,final修飾的變量都是首次顯示初始化後值都不能修改。對于基本資料類型,很好了解。

對于引用資料類型,引用變量指向的是實際的對象,但其存儲的是所指向對象的位址,是以,其值不能修改并不意味着其所指向的對象不能修改。

執行個體變量往往有三次指派機會,

配置設定空間,初始化屬性,調用構造方法

2, final 修飾方法:

final修飾的方法表示此方法已經是“最後的、最終的”含義,亦即此方法不能被重寫(可以重載多個final修飾的方法)。

此處需要注意的一點是:因為重寫的前提是子類可以從父類中繼承此方法,如果父類中final修飾的方法同時通路控制權限為private,

将會導緻子類中不能直接繼承到此方法,是以,此時可以在子類中定義相同的方法名和參數,此時不再産生重寫與final的沖突,

/*
	final修飾方法
*/
class Super{
	//加上final之後就不能再覆寫了
	//final修飾方法時表示該方法不能被子類覆寫
	public final void method(){

	}
}
class Sub extends Super{
	//方法的覆寫
	/*public final void method(){
		
	}*/
}
           

3,final修飾類

/final類不能被子類繼承,final讓此類斷子絕孫,是以當然不能被子類覆寫
final class Super{
	//加上final之後就不能再覆寫了
	//final修飾方法時表示該方法不能被子類覆寫
	public final void method(){

	}
}
/*class Sub extends Super{
	//方法的覆寫
	/*public final void method(){
		
	}
}*/