静态常量表达式: final static int 变量名 = "abc";
静态的变量在内存中只有一个拷贝(节省内存),JVM只为静态分配一次内存,在加载类的过程中完成静态变量的内存分配,可用类名直接访问(方便),当然也可以通过对象来访问(但是这是不推荐的)。
被final修饰的变量不能再改变变量的值。例如:
//错误代码,test1的值不能再更改
public final String test1 = "aaa";
test1 = "bbb";
使用final关键字修饰一个变量时,是指引用变量不能变,引用变量所指向的对象中的内容还是可以改变的。例如,对于如下语句:
final StringBuffer a=new StringBuffer("abcdefg");
//执行如下语句将报告编译期错误:
a=new StringBuffer("");
//但是,执行如下语句则可以通过编译:
a.append(" broken!");
final修饰一个成员变量(属性),必须要显示初始化。这里有两种初始化方式,一种是在变量声明的时候初始化;第二种方法是在声明变量的时候不赋初值,但是要在这个变量所在的类的所有的构造函数中对这个变量赋初值。例如,对于如下语句:
public class FinalTest {
final int j; // final 变量
public FinalTest() {
j = 2; // 写 final 域
}
}