javastatic标示,以及static赋初值的问题。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
javastatic 标⽰,以及static 赋初值的问题。
⼀:我们知道static 是在类加载的时候就加载的,我们今天主要来讲⼀个static 赋初值与不赋初值的问题。
也就是:
size:16px;">private static
private static int sum= 0; //(2)</span>0。
当我们在前⾯给sum 已经赋值的情况下,⽐如我们给sum 赋值为10,即sum = 10,然后我们在执⾏上⾯的(1)语句,我们再来看看我们sum 的值,我们发现sum 的值任然为10,没有被(1)中的语句赋值为0,因为在前⾯sum 已经包含了正确的缓存值,也就是被赋予了10。
我们执⾏上⾯(2)中的代码,我们再来看sum 的值,我们发现,sum 被赋值为0了,这是因为我们在(2)中显⽰的定义了sum 的值为0,所以他会被重新赋值为0。
我们来看看下⾯代码的例⼦就知道了。
public class cache { static {
inittest();
}
private static int sum =0;
//(1) 当将sum 的值设置
为0的时候,其运⾏后的
结果就为4950,
/*
* 因为static 是在程序加
载前最先执⾏的,在开始
执⾏完static 代码块,执
⾏inittest ()⽅法,其中
需要⽤到sum 以及init ,
* 因为开始程序还没有运
⾏到初始化的值,所以采
⽤默认的值,sum 为
0,init 为false ,执⾏完
inittest ()后sum 的值为
4950
* 然后 执⾏static sum
=0;将sum 再次设置为
0,然后在初始化init 将init
再次设置false,
* 最后在调⽤
getsum ()的时候就会再
次的调⽤inittest (),再
次计算得到sum 的值为
4950
*/
// private static int sum ;
(2) // ⽤这句将得到的
结果为9900
/*
* 还是和上⾯的⼀样,⾸
先是执⾏static 代码,执
⾏完static 代码块的过程
个上⾯的⼀样,执⾏完后
的结果为4950,
* 但是下⾯他不会执⾏
sum ,因为sum 没有赋
值,所以它会保留原来的
sum 值,也就是
sum=4950.这也就是结果
有差异的地⽅。
*****
* 下⾯就是要执⾏init ,
因为它有赋值语句,所以
这就是和上⾯的sum 不执1)语句我们得到的4950,执⾏(2)中的代码我们得到的是9900。
所以我们在以后使⽤static 的时候⼀定要注意。
这个问题在java 解惑中的52题,有详细的解析。
⼜不好不对的地⽅,请⼤家指出来,谢谢。