Java中final關鍵字
阿新 • • 發佈:2021-01-17
Java中final關鍵字
final為狀態修飾符,最終的意思,可以修飾類,成員變數,成員方法,不能修飾構造方法
final用於修飾屬性、變數
用final修飾後將變數定義成為了常量,當定義為常量後,無法對其再次進行賦值。
public class Demo1{
public void toFinal1(){
final int MAX_LENGTH = 100 ;
//此處若再次對該常類進行賦值,則會報錯
}
}
若final修飾區域性變數,則可以在聲明後進行賦值一次。強調:只能賦值一次。
public class Demo2{
public void toFinal2(){
final int MAX_LENGTH ;
MAX_LENGTH = 100 ;
//此處若再次對該常類進行賦值,則會報錯
}
}
若final修飾成員屬性,則必須在宣告時進行賦值
public class Demo3{
final int MAX_LENGTH = 100 ;
//此處若再次對該常類進行賦值,則會報錯
//若將其拆分為先聲明後賦值也會報錯
public void toFinal3(){
}
}
final用於修飾類
final修飾的類,不可以被繼承
final用於修飾方法
final修飾的方法,不能被子類重寫。
類中所有的private方法都隱式地指定為是final的,由於無法在類外使用private方法,所以也就無法覆蓋它。
此時可以在子類中定義相同的方法名和引數,這種情況不再產生重寫與final的矛盾,而是在子類中重新定義了新的方法。
可以對private方法新增final修飾符,但並沒有新增任何額外意義。
final關鍵字的好處
final關鍵字提高了效能。JVM和Java應用都會快取final變數。
final變數可以安全的在多執行緒環境下進行共享,而不需要額外的同步開銷。
使用final關鍵字,JVM會對方法、變數及類進行優化。
final和abstract這兩個關鍵字是反相關的,final類就不可能是abstract的
在匿名類中所有變數都必須是final變數
final與static區別
final修飾的變數將變為常量,而static是將變數或方法靜態處理。
在使用中final將變數定為某值,無論通過方法或直接使用 物件.屬性 都無法改變其值。
而static修飾的變數在物件中可以改變,不過改變的值是在類中進行改變,在建立下一個物件時,新的物件的static修飾的變數是改變後的值。