问题描述
- 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修饰的变量只能在声明变量时赋值或者在构造函数里赋值嘛?
解决方案
第一点,成员变量必须有初始化值,也就是你没有给String赋值,系统默认会在给他一个null;你也知道他叫做最终变量,你类已经加载了你还想再给他赋值,而构造函数是在类加载的时候自动给他赋值的就不一样了。能理解吗?
解决方案二:
final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量
解决方案三:
final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量
解决方案四:
被final修饰的不就是常量了嘛,比如PI之类的,不知道理解的对不对
解决方案五:
个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了
解决方案六:
个人认为你不该在类中用final来修饰,这样后面方法内就不能再给final修饰的变量赋值了
解决方案七:
final修饰的终态变量只能在声明变量时或构造函数里赋值,其实终态变量就是常量,常量是不能被赋值的,就相当于定义了PI一样。
时间: 2024-11-03 20:59:49