2011年6月14日 星期二

Java關鍵字-final

final這個關鍵字依照使用的地方不同會有不同的效果及意義
以3個可以使用final的地方來分析:data、method、classes

final data-

告訴編譯器某塊資料是固定不變
但是在用來修飾object reference時須注意
final 會讓reference固定指向一個物件,但該物件的內容卻還是可以更動,array也是相同情況
Java允許產生留白的finals(blank final)
能宣告資料成員為final但不給予初始值,以保持彈性
例如:

public class BlankFinal{
    private final int i = 0;  //Initialized final
    private final int j;         //Blank final
  
    public BlankFianl(){
         j = 1;    //Initialized blank final
    }
    public BlankFianl(int x){
         j = x;    //Initialized blank final

    }
}

編譯器會強迫必須對所有的finals賦值
如果不是在定義處,就得在建構式中以運算式設定其值
此外,Java也允許將引述宣告為final,意指無法在函式中另該引數改指他處
如:  void doSth(final objectA a){...}

final methods-

使用final methods的原因是鎖住這個函式,使繼承者無法進行override
class中所有的private函式自然就會是final
所以將final用在private函式上沒有意義
假使嘗試要override private method,編譯器只會將其視為該class新建立的函式而不會override

final classes-

將class宣告為final表示此class不允許被繼承

沒有留言:

張貼留言