許多程序設計語言都有自己的辦法告訴編譯器某個數據是“常數”。常數主要應用於下述兩個方面:
1)編譯期常數,它永遠不會改變;
2)在運行期間初始化的一個值,我們不希望它發生變化。ss
對於編譯期的常數,編譯器(程序)可將常數值“封裝”到需要的計算過程裡。也就是說,計算可在編譯期間提前執行,從而節省運行時的一些開銷。在Java 中,這些形式的常數必須屬於基本數據類型(Primitives),而且要用final 關鍵字進行表達。
無論static 還是final 字段,都只能存儲一個數據,而且不得改變。
若隨同對象句柄使用final,而不是基本數據類型,它的含義就稍微讓人有點兒迷糊了。對於基本數據類型,final 會將值變成一個常數;但對於對象句柄,final 會將句柄變成一個常數。進行聲明時,必須將句柄初始化到一個具體的對象。而且永遠不能將句柄變成指向另一個對象。然而,對象本身是可以修改的。Java對此未提供任何手段,可將一個對象直接變成一個常數。