被 final 修饰的类型、例如 String ,定义变量的额时候都要必须赋初值吗?
1个回答
展开全部
不一定。
final 用于声明属性、方法和类,分别表示属性一旦被分配内存空间就必须初始化并且以后不可变、方法一旦定义必须有实现代码并且子类里不可被覆盖、类一旦定义不能被定义为抽象类或是接口,因为不可被继承。
重点是【一旦被分配内存空间】。
你既可以:
public class Test{
public final int a = 1; // 在声明时初始化
public Test(){
}
}
也可以:
public class Test{
public final int a;
public Test(){
a = 1; // 在构造函数里初始化
}
}
为什么可以在构造函数里初始化呢?因为当类被加载进内存的时候,这个属性并没有给其分配内存空间,而只是定义了一个变量,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询