在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中在构造函数方法内增加静态变量是否有效?