2 a997208868 a997208868 于 2015.06.06 17:32 提问

final修饰的终态变量只能在声明变量时或构造函数里赋值嘛?

class GongChengShi {
final String name;//名字
final String dizhi;//地址
int age;//年龄
public GongChengShi(String name, int age) {
this.name = name;//构造函数初始化时给名字和年龄赋值
this.age = age;
}
void setDizhi(String dizhi){//在子类中调用这里给地址赋值
this.dizhi = dizhi;
}
}
输出结果
---------- javac ----------
Hello.java:36: 错误: 无法为最终变量dizhi分配值
this.dizhi = dizhi;
^
1 个错误

我dizhi在声明变量时直接赋值可以,在构造函数里赋值也可以,但是放到普通方法里赋值就不行了。
final修饰的变量只能在声明变量时赋值或者在构造函数里赋值嘛?

7个回答

u014559683
u014559683   2015.06.06 18:06

第一点,成员变量必须有初始化值,也就是你没有给String赋值,系统默认会在给他一个null;你也知道他叫做最终变量,你类已经加载了你还想再给他赋值,而构造函数是在类加载的时候自动给他赋值的就不一样了。能理解吗?

weicaihui2008
weicaihui2008   2015.06.06 18:35

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量

soso_money
soso_money   2015.06.06 20:13

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量

sinat_25355595
sinat_25355595   2015.06.06 20:47

被final修饰的不就是常量了嘛,比如PI之类的,不知道理解的对不对

sinat_25355595
sinat_25355595   2015.06.06 20:51

个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了

sinat_25355595
sinat_25355595   2015.06.06 20:51

个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了

lyl00ling
lyl00ling   2015.06.06 23:13

final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量,常量是不能被赋值的,就相当于定义了PI一样。

Csdn user default icon
上传中...
上传图片
插入图片