本帖最后由 奔跑的猴子 于 2015-1-30 14:05 编辑
在java里面修饰词 final修饰过的变量的值是不可以被修改的。所以所谓修改,其实是定位在于这个final变量还未进行初始化赋值的时候。
1,在外部声明的变量在这个类一开始调用就初始化了,初始化进程在构造器中进行;
2,如果是在外部只定义了一个final变量但是没有赋值的时候,可以在构造器中对这个变量进行赋值;如果在初始化完都没有赋值,编译会报错;
3,但是在方法内定义了一个final变量,如果没有调用这个方法,就不会初始化这个变量,编译器就不会报错,在方法里可以先声明后赋值。
举个例子:
public class FinalDemo
{
// public final int x; 构造器中未初始化,编译不通过,定义一个未赋值的final变量x
public final int y; //定义一个未赋值的final变量y
public final int z = 10; //定义一个未赋值的final变量z
public FinalDemo ( )
{
this.y = 20; //正常编译
// this.z = 30; 编译报错,无法为最终变量分配值
}
public static void main(String[] args)
{
FinalDemo fnd = new FinalDemo ();
System.out.println ("y="+fnd.y+";z="+fnd.z);
fnd.test();
}
public void test ()
{
final int m,n;//正常编译,在方法里面,使用时才进行初始化,
m = 40;
System.out.println ("m="+m);
}
}
以上代码打印结果为:
y=20;z=10
m=40
|