final 意思是「最終的,最後的」,我認爲是不可變的,他能夠修飾類,變量和方法。因此能夠認爲他所修飾的類,變量和方法都是不能改變的。安全
1.final修飾類spa
被final修飾的類不能被繼承,即他不能擁有本身的子類,不然會報錯。對象
首先 建立一個用fianl 修飾的父類Test繼承
而後建立一個子類test 繼承Testtest
點進去看一下報警信息,效率
意思是類test不能被final修飾的類Test。基礎
2.final修飾方法變量
被final 修飾的方法不能被重寫,可是:權限
重寫的前提是子類能夠從父類中繼承此方法,因此當父類中被final修飾的方法的訪問權限爲private時,子類中就能夠重寫此方法。程序
(一)父類中方法控制權限爲public
首先在父類中建立一個方法,並用final修飾
而後在子類中中重寫work方法,能夠看到當子類重寫父類中final修飾的方法是,報錯了,報錯信息以下:
即子類不能重寫父類中被final修飾的方法
(二)父類中方法控制權限爲private
final修飾的變量,不管是類屬性,對象屬性,形參仍是局部變量,都須要進行初始化操做。
(1)修飾變量
能夠看到被final修飾的變量報錯了,是由於final修飾的字段fa沒有被初始化,因此當變量被final修飾是要賦值初始化,當初始化以後就不會報錯。
(2)修飾類屬性
也是須要初始化的
結合以上的基礎知識,咱們來分析一下爲什String類是final的?
這個例子標明,讓一個普通類繼承String類,結果發現報錯了.
即Test不能是final類String的子類,這裏已經很明顯地看出String類是final的,可是究竟是爲啥子呢?
(1)因爲String類不能被繼承,因此就不會沒修改,這就避險了由於繼承引發的安全隱患
(2)String類在程序中出現的頻率較高,爲了不安全隱患,它每次出現是都用final來修飾,這無疑會下降程序的執行效率,因此乾脆直接將其設爲final提升效率