在代码块中执行静态属性的加减,为什么不是从静态属性的初始值输出来?
问题描述
我有一个int类型静态属性,初始值为0,在代码块中对其进行加法运算,但在main方法中遍历输出时,其从1开始输出数据,这就非常的奇怪。
问题出现的环境背景及自己尝试过哪些方法
遇到这种问题后,我首先去掉静态代码块,直接对静态属性做加法运算,其是从0输出来的,如下代码所示:
package com.zbystudy;
/**
* Created By zby on 14:27 2019/4/12
*/
public class StaticFiled {
public static int count = 0;
private final int objCount = count++;
public void printObjCount() {
System.out.println("生成对象的个数为: " + objCount);
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new StaticFiled().printObjCount();
}
}
}
输出结果如图所示:
相关代码
但是,改为代码块就不是我预想的那样,如下代码所示:
package com.zbystudy;
/**
* Created By zby on 14:27 2019/4/12
*/
public class StaticFiled {
public static int count = 0;
{
count++;
}
private final int objCount = count;
public void printObjCount() {
System.out.println("生成对象的个数为: " + objCount);
}
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
new StaticFiled().printObjCount();
}
}
}
其输出结果是:
如果我把count++;
修改为++count;
其输出结果也是如此,这就很奇怪哎?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
前++与后++的区别
objCount = count++
是先赋值在执行++;
改成
objCount = ++count
new StaticFiled()的时候执行了一次count++
你这根本不是静态初始化块,有static
修饰符才是静态的以上只是指出用词错误,并没有解决问题
实测把自增放在赋值后面就是从0开始了,执行顺序跟位置是有关系的