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变量命名。