final关键字之final变量

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变量命名。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章