三種情況: 數(shù)據(jù)台囱、方法和類
1、數(shù)據(jù)
當(dāng)final關(guān)鍵字修飾基本數(shù)據(jù)時(shí)读整,表達(dá)的含義是簿训,永不改變的編譯時(shí)常量;
如:final int data = 1;
修飾對象引用時(shí)米间,它代表的意思是强品,其對象的引用不變,對象中的內(nèi)容可以改變屈糊;但該引用不可以指向另一個(gè)對象
如:final int[] array = new int[4];
array[0] = 1;
//下面為錯誤示例
int[] array1 = new int[4];
array = array1;
特殊一點(diǎn):Java允許生成被聲明為final但又未給定初始值的域的榛,但必須在構(gòu)造器中初始化,如下:
public class Demo{
//未賦值
final int data;
Demo(){
data = 1;
}
}
用final修飾方法中參數(shù)
void add(final int data){}
你可以讀參數(shù)逻锐,但無法修改參數(shù)夫晌。它主要向匿名內(nèi)部類傳遞數(shù)據(jù)。java是值傳遞昧诱,基本類型改變了值晓淀,也只會在局部中生效。引用類型則會對外也產(chǎn)生影響盏档。
內(nèi)部類形參必須使用final修飾
public class OuterClass {
public void display(final String name){
class InnerClass{
void display(){
System.out.println(name);
}
}
}
}
這是因?yàn)閮?nèi)部類和外部類需要保持一致凶掰,內(nèi)部類使用name這個(gè)變量,是需要copy一份。加入final防止外部改變了其地址懦窘,導(dǎo)致數(shù)據(jù)出現(xiàn)不一致前翎。
2、方法
使用final方法的主要原因:鎖定方法畅涂,防止被繼承中的類覆蓋修改方法含義鱼填。
private修飾的方法,隱式的指定為final修飾毅戈。
3苹丸、類
即不允許別人繼承你的類時(shí),則使用final修飾類苇经。而且final類中的方法也間接地隱式指定為final赘理,無法覆蓋。
比如Java中的String類Integer類等都被指定為final