毕老师在视频中说过被final修饰的实例变量必须显示指定初始值,而且毕老师跟我们
讲的时候,是在定义final实例变量时就指定初始值的,这点我们都知道。可是除了这
种给final实例变量指定初始值之外,还有其他方式吗?
答案是:有的。我看书得知,除了毕老师给我们讲的这种之外,还有两种可以为final
实例变量初始化,那就是:
1、在非静态构造块中为final实例变量指定初始值
2、在构造函数中为final实例变量指定初始值
大家看看我以下的代码,你们应该就明白了。
class Demo{
//定义final实例变量时赋初始值
final String str1 = "HeiMa";
final String str2;
final String str3;
//在构造块中为str2赋初始值
{
str2 = "itheima";
}
//在构造函数中为str3赋初始值
public Demo(){
this.str3 = "黑马程序员";
}
}
public class FinalDemo{
public static void main(String[] args){
System.out.println(new Demo().str1);
System.out.println(new Demo().str2);
System.out.println(new Demo().str3);
}
}
程序运行正常:
HeiMa
itheima
黑马程序员
综上所知,给final实例变量初始化的方式就有三种了。
以上三种,可以任意选择,但是一旦选择了其中一种为final初始化之后,
就不可以再用其他方式给其修改了。这点很好理解,再看看下面的代码:
class Demo02{
final String str = "HeiMa";
{
str = "itheima";
}
public void Demo(){
this.str = "黑马程序员";
}
}
public class FinalDemo02{
public static void main(String[] args){
System.out.println(new Demo().str);
}
}
编译程序会报错:无法为最终变量 str 指定值
这就是因为被final修饰的变量是最终变量,定义final变量时必须显示初始化,
一旦初始化之后就再也不能修改了。
|