gpt4 book ai didi

java - 静态方法和非静态方法的区别

转载 作者:行者123 更新时间:2023-12-01 18:42:58 27 4
gpt4 key购买 nike

我正在编写一个相当简单的程序,以便了解静态和非静态方法和变量之间的区别,我认为我理解它,但我无法运行以下代码:

public class Zombie {
String name;
int serial = 0;
static int count = 0;

public Zombie(String name) {
this.name = name;
count++;
}

static String printStatus() {
String status;
if(count == 1) {
status = (count + "zombie created so far");
}
else {
status = (count + "zombies created so far");
}
return status;
}
String printZombie() {
String ident = (name + " is zombie " + serial);
return ident;
}

public static void main(String[] args) {
printStatus();

Zombie z1 = new Zombie("Deb");

printStatus();

Zombie z2 = new Zombie("Andy");

printStatus();

Zombie z3 = new Zombie("Carl");

printStatus();

z1.printZombie();
z2.printZombie();
z3.printZombie();
}
}

它的输出应该是:

0 zombies created so far
1 zombie created so far
2 zombies created so far
3 zombies created so far
Deb is zombie 0
Andy is zombie 1
Carl is zombie 2

但我无法让它运行。我认为问题(至少其中一个)是第一种方法,但我无法弄清楚。 count 应该是静态的,而其他两个变量不是,并且 printStatus 应该是静态的,但 printZombie 不是。有人可以向我解释一下吗?

最佳答案

静态是属于Class的上下文,非静态方法在对象的上下文下执行

printStatus(); 对于所有僵尸来说都是完全相同的,而 printZombie 将取决于对象。

通常静态方法应该是独立的,就像数学函数一样。

Math.divide(NumberA, NumberB)

可以使用类本身作为引用在类外部调用静态属性/方法,如下所示:

Zombie.count,如果您在类内部,您可以像在 main 方法中一样使用它,但它可能看起来很困惑

关于java - 静态方法和非静态方法的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19127843/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com