提问人:Gisel Guerrero 提问时间:4/12/2023 更新时间:4/12/2023 访问量:29
为什么我为我的类制作的访问器方法从不同的对象打印内容?[复制]
Why does the accessor method I made for my class print something from a different object? [duplicate]
问:
我做了 2 件我制作的谷物类物品。一个叫磨砂薄片,名字叫“磨砂薄片”,一个叫luckyCharms,名字叫“幸运符”。当我调用我编写的访问器方法来打印 FrostedFlakes 的名称时,它打印了名称“Lucky Charms”。
public class MyProgram
{
public static void main(String[] args)
{
Cereal frostedFlakes = new Cereal("frosted Flakes");
Cereal LuckyCharms = new Cereal("Lucky Charms");
System.out.println(frostedFlakes.getName());
}
}
import java.io.*;
public class Cereal {
//static variables
private static String name;
//constructor
Cereal(String name){
this.name = name;
}
//accessor methods
public static String getName(){
return name;
}
}
我想也许我编写构造函数或编写变量的方式有问题,所以我对两者都进行了实验,但得到了相同的结果。
答:
0赞
Z-100
4/12/2023
#1
构造函数和一切都很好,但你不应该声明为变量。
这是因为静态变量在类的所有实例(对象)上都是“共享”*的;因此是静态的 -> 在您的实例中,这意味着,一旦您设置了“name”,它将在所有实例之间共享name
static
Cereal
*此处共享仅意味着,该特定变量只有一个实例,在该类的所有对象之间共享。
要使代码“正常工作”,只需从变量名称中删除关键字即可。
这会从变量中删除 one-instance-across-everything 属性,并使其成为“特定于对象”的属性。static
几乎没有其他信息:您通常只想声明变量,当它们是全局属性或值时,这些变量或值不会特定于对象,例如static
private static final int MAX_LENGTH_TEXT = 425
希望这有帮助!干杯
评论
name
不应该是 .这意味着在 的所有实例中,该变量只有一个实例。static
Cereal
private static String name;
static