在代码块中执行静态属性的加减,为什么不是从静态属性的初始值输出来?

发布于 2022-09-11 19:07:00 字数 1427 浏览 12 评论 0

问题描述

我有一个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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

不知所踪 2022-09-18 19:07:00

前++与后++的区别

瞄了个咪的 2022-09-18 19:07:00

objCount = count++
是先赋值在执行++;
改成
objCount = ++count

旧故 2022-09-18 19:07:00

new StaticFiled()的时候执行了一次count++

心的位置 2022-09-18 19:07:00

你这根本不是静态初始化块,有 static修饰符才是静态的


以上只是指出用词错误,并没有解决问题

实测把自增放在赋值后面就是从0开始了,执行顺序跟位置是有关系的


    private final int objCount = count;

    {
        count++;
    }

    
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文