final類
在java的類,方法和變量前面,可以加上final關鍵字。final關鍵字表示它修飾的類,方法和變量不可以被改變。
final變量
final變量表示該變量是不可被改變的,其實就是常量。因爲在java中不能用const保留字來定義常量,所以需要使用常量的場合,可以使用final關鍵字來修飾。
例如: final int CONST_VAR = 2;
如果final變量是簡單類型的變量,那麼變量的值一旦初始化後,就不能改變。如果final變量是引用類型的變量,那麼不能改變這個變量的引用,但是可以改變這個變量所引用的對象的屬性,例子://定義一個Aclass類
class Aclass
{
private int a;
public Aclass(){
a = 100;
}
public void setA(int theA)
{
a=theA;
}
public int getA()
{
return a;
}
}
//定義一個類來測試final引用變量
public class TestFinal
{
final Aclass aClass = new Aclass();
public static void main(String[] age)
{
TestFinal tf = new TestFinal();
tf.aClass.setA(1);
System.out.println(tf.aClass.getA());
}
}
分析:在這個例子中,我們定義了一個類Aclass,這個類只有一個實例變量a,並且有相應的存取方法來對它進行存取。然後,在類TestFinal中,我們定義了一個final的引用類型的變量aClass,這個變量的引用是不能改變的,但是我們可以將這個引用變量指向的對象的屬性進行修改。在這裏,我們通過調用實例的setA()方法來修改它實例變量a,這時這個靜態引用變量指向的對象的屬性值被修改爲1.
注意:根據java命名規範,如果在編譯的時候,就可以確定final變量的值,那麼此變量的名字應該都大寫,並且指出完整含義,如果需要用幾個單詞描述,那麼單詞直接用“_”來分隔,例如:static final MAX_TAX_RATE = 20;
相反的,在下面情況下可以不使用命名規範:final變量無法在編譯的時候就獲得值,必須在執行時才能得到值。例如,上述例子中的aClass就是一個例子。final Aclass aClass = new Aclass();
在編譯的時候,程序不會執行new動作來實例化一個Aclass,並且賦值給aClass,所以就沒有上面的命名規則來給final變量命名。