final可以修饰成员变量,也可以修饰局部变量、形参。final变量一旦获得初始值之后,final的变量就不能被重新赋值。
成员变量是随类初始化或对象初始化而初始化的,当执行静态初始化块时候可以对类属性进行赋初始值,当执行普通初始化块或者构造器的时候可以对实例属性赋初始值。因此成员变量的初始值可以在定义的时候赋值或者在初始化块、构造器中指定。
对于final修饰的成员变量而言,一旦有了初始值之后,就不能被重新赋值,因此不可以在普通方法中对成员变量赋值。要么在定义的时候赋值,要么在方法块和构造器中赋值。
final成员变量,必须由程序员显示初始化,系统不会对final成员进行隐式初始化。
final修饰局部变量时既可以在定义时候指定默认值,也可以不指定,在后面指定,但只能一次。
final修饰基本类型的时候 变量不能改变
final修饰引用类型变量,final只保证这个引用的地址不变,即一直引用同一对象。但这个对象可以改变。
上面是找到的资料:
总结就是:final修饰的基本类型的变量:只要赋给了值,其值就不能呗改变
final修饰的是引用变量,只要其引用地址没有变,其对应的值是可以改变的,(就和你说的数组就是引用类型)
public static void main(String[] s) {
final int[] Arr = { 5, 6, 12, 8 };//引用类型,其值是可以改变的
Arr[2] = -8;
System.out.println(Arr[2]);
final int num=1;//基本类型,其值是不可以变的
//num=10;//num 有了初值,不能更改
final ArrayList list=new ArrayList();//集合是引用类型,所以其中元素的值是可以改变的
list.add(1);
list.add(2);
System.out.println(list);
list.set(0, 0);
System.out.println(list);
}
结果:
-8
[1, 2]
[0, 2]
希望对你有帮助
|