四種用法:
1.可以用來修飾一個(gè)類
public final class 類名稱{
//方法體...
}
含義:這個(gè)類不能有任何子類
注意:一個(gè)final類,其中所有成員方法都不能進(jìn)行覆蓋重寫(沒兒子)
2.可以用來修飾一個(gè)方法
修飾符 final 返回值類型 方法名稱(參數(shù)列表){
//方法體...
}
注意:當(dāng)final修飾一個(gè)方法,此方法不能進(jìn)行覆蓋重寫;所以對于類和方法來說,abstract和final不能同時(shí)使用,因?yàn)槊堋?br>
3.可以用來修飾一個(gè)局部變量
注意:當(dāng)final修飾一個(gè)局部變量(只保證唯一一次賦值),那么這個(gè)局部變量就不能進(jìn)行更改。
對于基本類型來說,不可變說的是變量中的數(shù)據(jù)不可改變
對于引用類型來說,不可變說的是變量中的地址值不可改變,但里面的內(nèi)容可以改變。

final1.png
4.可以用來修飾一個(gè)成員變量
注意:當(dāng)final修飾一個(gè)成員變量,那么這個(gè)成員變量也不能進(jìn)行更改。
與局部變量區(qū)別:
1、由于成員變量有默認(rèn)值,所以用了final后必須手動賦值(報(bào)提示),不給默認(rèn)值了;
2、當(dāng)final修飾一個(gè)成員變量,要么直接賦值,要么通過構(gòu)造方法賦值(二者選其一)。必須保證所有重載的構(gòu)造方法對其都有賦值。
成員變量和局部變量的區(qū)別
1.從語法形式上,看成員變量是屬于類的,而局部變量是在方法中定義的變量或是方法的參數(shù);成員變量可以被public,private,static等修飾符所修飾,而局部變量不能被訪問控制修飾符及static所修飾;但是,成員變量和局部變量都能被final所修飾;
2.從變量在內(nèi)存中的存儲方式來看,成員變量是對象的一部分,而對象存在于堆內(nèi)存,局部變量存在于棧內(nèi)存
3.從變量在內(nèi)存中的生存時(shí)間上看,成員變量是對象的一部分,它隨著對象的創(chuàng)建而存在,而局部變量隨著方法的調(diào)用而自動消失。
4.成員變量如果沒有被賦初值,則會自動以類型的默認(rèn)值而賦值(一種情況例外被final修飾但沒有被static修飾的成員變量必須顯示地賦值);而局部變量則不會自動賦值。