黑马程序员技术交流社区
标题:
final修饰变量时,初始化问题。
[打印本页]
作者:
dev
时间:
2012-7-4 17:01
标题:
final修饰变量时,初始化问题。
毕老师在视频中说过
被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变量时必须显示初始化,
一旦初始化之后就再也不能修改了。
作者:
陆强强
时间:
2012-7-4 17:42
本帖最后由 陆强强 于 2012-7-4 17:52 编辑
还有一种情况,当final修饰的是局部变量时可以通过方法随意传入赋值,但方法内部,X不能再更改。
class finals
{
public static void main(String[] args)
{
finaltest f=new finaltest();
System.out.println(f.number(2));
System.out.println(f.number(5));
System.out.println(f.number(7));
System.out.println(f.number(10));
}
}
class finaltest
{
public int number(int y)
{
final int x=y;
//x=8;报错
return x;
}
}
作者:
车风波
时间:
2012-7-4 17:44
还有这样
static final Integer x;
static {
x = 3;
}
作者:
dev
时间:
2012-7-4 17:57
车风波 发表于 2012-7-4 17:44
还有这样
static final Integer x;
static {
你这样也对,不过你这是
类变量
的实例化方式,
我上面说的是
实例变量
的实例化方式哦。
作者:
贾飞雨
时间:
2012-7-4 19:51
楼主学习了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2