被 final 修饰的类型、例如 String ,定义变量的额时候都要必须赋初值吗?

被final修饰的类型、例如String,定义变量的额时候都要必须赋初值吗?... 被 final 修饰的类型、例如 String ,定义变量的额时候都要必须赋初值吗? 展开
 我来答
然后去远足
推荐于2017-10-12 · TA获得超过1万个赞
知道大有可为答主
回答量:4016
采纳率:83%
帮助的人:2415万
展开全部

不一定。

 

final 用于声明属性、方法和类,分别表示属性一旦被分配内存空间就必须初始化并且以后不可变、方法一旦定义必须有实现代码并且子类里不可被覆盖、类一旦定义不能被定义为抽象类或是接口,因为不可被继承。

 

重点是【一旦被分配内存空间】。

 

你既可以:

public class Test{
    public final int a = 1; // 在声明时初始化

    public Test(){
    }
}

也可以:

public class Test{
    public final int a;

    public Test(){
        a = 1; // 在构造函数里初始化
    }
}

 

为什么可以在构造函数里初始化呢?因为当类被加载进内存的时候,这个属性并没有给其分配内存空间,而只是定义了一个变量,只有当类被实例化的时候这个属性才被分配内存空间,而实例化的时候同时执行了构造函数,所以属性被初始化了,也就符合了当它被分配内存空间的时候就需要初始化,以后不再改变的条件。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式