在Java中在构造函数方法内增加静态变量是否有效?

来源:爱站网时间:2021-11-29编辑:网友分享
在Java中在构造函数方法内增加静态变量是否有效?今天傍晚有同事问到爱站技术小编这个问题的时候,小编一时间也难说清楚,于是整理出了一份资料,相信这个问题朋友们也有遇到过,希望这篇文章能给大家带来一定的启发和感悟。

问题描述


主要目标是创建一个静态变量,该变量将随该类创建的每个新实例一起增加。无论如何,在构造函数内部使用静态变量可以接受吗?我知道静态构造函数会很快崩溃,但是可以提供任何帮助。

class Bird  {

    private static int birdPop = 0;

    public Bird (String birdColor, int birdAge) {
        setBirdColor(String n);
        setBirdAge(int g);

        birdPop++;
    }
}

思路一:


通常,静态变量是一个坏主意,尽管在特殊情况下您可能会忽略它。

在这里,人口成为静态是没有意义的。增量可能属于在给定总体中创建Bird的实例方法。

这也不是线程安全的。静态变量使类thread-hostile代替了普通的与线程无关

思路二:


在这种情况下,我认为您在做什么就可以了。

在这里使用静态变量不是很好,但是它应该可以满足您的尝试。

我不知道这里是否真的存在线程问题,因为要找出constructors in Java are already synchronized。我不知道。

下面的示例显示了如何在构造函数中使用synchronized块,但在这种特殊情况下,我认为实际上并不需要它。

这里是您班级的不同版本,仅作了一些细微改动,使其变得像“更多” Java:]

class Bird  {

    private static Integer population = 0;

    private String color;
    private int age;

    public Bird (String birdColor, int birdAge) {

        this.color = birdColor;
        this.age = birdAge;

        synchronized (population) {
            population++;
        }
    }

    public static int getPopulation() {

        return POPULATION;
    }

    public static void main(String... args) {

        new Bird("color", 1);
        new Bird("color", 1);
        new Bird("color", 1);
        new Bird("color", 1);
        new Bird("color", 1);

        System.out.println(Bird.getPopulation());
    }
}

 以上内容就是爱站技术频道小编为大家分享的在Java中在构造函数方法内增加静态变量是否有效?看完以上分享之后,大家觉得在Java中在构造函数方法内增加静态变量是否有效?

上一篇:如何避免使用Spring ConversionService的目标类型为List?

下一篇:给出一个数字和一个数组,找到所有可能的组合,它们加起来等于给定的数字的原理是什么

您可能感兴趣的文章

相关阅读

热门软件源码

最新软件源码下载