被final修饰的变量的赋值原则:只能赋值一次。 赋值方式(两种):
赋值方式1:声明时赋值 final int x=3;
赋值方式2:声明后赋值,得区分2种情况
a、被final修饰的变量是局部变量:即在类内的函数内部声明的变量,那么在内部赋值一次就可以:final int x;x=3;
b、被final修饰的变量是成员变量时:一般建议使用赋值方式1,若使用声明后赋值的话必须得使用static修饰,而且赋值语句必须在静态代码块内(原因:若是成员变量被final修饰,而且没有初始化:那么赋值语句在类内部放置位置有3个:静态代码块、构造代码块、方法体内:若是在构造代码块和方法体内放置赋值语句,那么就不能保证这个赋值语句执行的唯一性(当定义多个对象或多次执行方法时:赋值语句会执行多次,违背赋值原则,所以赋值语句就只能放置在静态代码块内,所以这个被final修饰的成员变量一定是静态的),这种方式在开发时基本不会用~~~
示例:
class FinalTest
{
public static void main(String[] args)
{
final int a;//final修饰局部变量
a=1;//可以在类内部赋值,但赋值语句一定要放置在使用这个变量的语句之前!
System.out.println(a);
System.out.println(new num().b);
}
}
class num
{
static final int b;//final修饰成员变量
static {b=4;}//静态代码块内给a赋值
}
补充:其实被final修饰的变量可以不赋值,但这个变量一定不能是成员变量(原因在赋值方式2的b条中已经说明)
也就是说局部变量可以被final修饰而不赋值,但在这个局部范围内不能使用这个局部变量了,也就是说这个声明时无意义的了.