Java 中final static变量为什么要初始化

 我来答
随风的鱼儿漂流
推荐于2018-05-18 · TA获得超过617个赞
知道小有建树答主
回答量:123
采纳率:75%
帮助的人:59.4万
展开全部
在java中用final修饰符修饰的变量表示不可以被二次赋值,且系统不会给其赋默认值。
如果单纯只是final变量,可以在定义的时候就赋默认值,也可以在构造方法中赋默认值。
但是如果同时用final static 修饰变量,因为static变量属于类而不属于对象,且在调用构造方法之前static 变量就已经被系统给赋默认值。而相应的final static 变量就只能在定义的时候就初始化,否则既无法在构造方法中初始化,系统又不会赋默认值,相当于这个变量被定义出来是毫无用处的。 因此java中final static变量必须初始化。
星星星星114
2019-06-17
知道答主
回答量:8
采纳率:0%
帮助的人:3379
展开全部
举个例子:一、一个属性成员变量为:public int age;(编写完该句意味着虚拟机已经为该成员变量age赋默认值0。int类型默认值为0。也可以直接定义时赋值,如public int age =10;。该age的值可以被赋值或者在构造方法里面进行改变)。
二、public static int age;(该句增加static修饰age,不同的是,加了static表示了该变量为全局变量,且默认取值为0,因为int默认取值为0。也可以进行直接定义时赋值public static int age =10;不同的是该属性不依赖对象、依赖类,本类对象共享一份,和上面一样该age的值一样可以被赋值或者在构造方法里面进行改变)。
三、public final int age;(该句用final单独修饰,表示该成员属性变量age将不会取int类型的默认值,故age没有被初始化,必须在定义的时候进行直接赋值,或者在创建对象的时候使用构造方法对该成员属性变量进行赋值。并且一旦用final定义后,就变为最终变量,值 不可以再被改变!所以,该句代码的正确写法应该是如下两种:1、public final int age = 10;
2、
class Dog{
public final int age;
public Dog(){
int age = 10;

}
}
)。
四、public static final int age;(该句和上面一样,也是age没有被初始化,所以age必须被赋值,不同的是该情况下必须是直接赋值,而不能在构造方法里面进行赋值。正确的写法是:public static final int age = 10;这是因为第一、用final修饰的属性不能够用数据类型的默认值为初始化的值,必须要直接赋值,或者在使用构造方法去创建对象的时候对变量进行赋值。但是,第二、由于被static修饰以后的属性成员变量,该成员变量是在类加载完的时候其值已经被确定了,该值依赖类,并不依赖对象。即使不创建对象它就已经有值了,并且由于被final所修饰不能够用数据类型的默认值,故而只能直接赋值,并且被final所修饰成为了最终变量,不可以改变。故而,由于以上两方面原因,只能是直接赋值。public static final int age = 10;)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
easyxu_翔
推荐于2017-11-25
知道答主
回答量:13
采纳率:0%
帮助的人:7.4万
展开全部
final 的变量 是不可变的 ,类第一次加载时static 变量需要一次赋值,所以两者结合必须要初始化
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
hcbaby2211
2012-02-19
知道答主
回答量:14
采纳率:0%
帮助的人:10.2万
展开全部
被final static 修饰的变量是常量。 尽然是常量,那么就必须有个确定的值才有意义。所以必须初始化。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bjut小李
2012-02-19
知道答主
回答量:23
采纳率:0%
帮助的人:11.2万
展开全部
static 的变量是编译之前就会定义,所以需要对它进行赋值,finial static 更是如此。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式