package penny_pinch_v2;
public class Prizes {
public static String[] prizes = { "Puzzle", "Poster", "Ball", "Game", "Doll" };
}
===========Separate Class File============
package penny_pinch_v2;
public class RunPennyPinch {
public static void main(String[] args) {
System.out.print(prizes[1]);
}
}
我正在尝试在不同的类中访问数组'奖品',但它一直说'奖品'无法解决。如果你能告诉我如何解决这个问题,那就太好了。
答案 0 :(得分:2)
如果您在另一个类中引用静态字段,则需要使用该类的名称来引用该字段,因此基本上您需要将main更改为:
public class RunPennyPinch {
public static void main(String[] args) {
System.out.print(Prizes.prizes[1]);
}
}
答案 1 :(得分:2)
这称为命名空间问题。让我们假装你可以做你想做的事。如果您创建另一个名为Prizes2
的类并在其中放入另一个变量(也称为prizes
),该怎么办? RunPennyPinch
如何知道应该使用哪个prizes
变量?
也许你可以通过说“一次只允许一个prizes
变量存在于任何程序中来解决这个问题”。如果这是一个真正的限制,你很快就会用尽有意义的名字给变量。
Java提出的解决方案是命名空间:为变量提供它所处的上下文。两个变量可以具有相同的名称,但只要它们具有不同的上下文,它们就不会冲突< / em>的。您支付的价格是您在引用变量时必须告诉程序您要使用的上下文。
以下是解决问题的方法:
package penny_pinch_v2;
public class Prizes {
public static String[] prizes = { "Puzzle", "Poster", "Ball", "Game", "Doll" };
}
//===========Separate Class File============
package penny_pinch_v2;
public class RunPennyPinch {
public static void main(String[] args) {
System.out.print(Prizes.prizes[1]);
}
}
您还应该知道其他事项:如果您没有明确说明上下文,则默认使用this
作为上下文。作为一个不相关的例子,这两个方法做同样的事情并且都起作用:
package foo;
public class Bar {
public String baz = "Puzzle";
public void impliedThis() {
System.out.println(baz);
}
public void explicitThis() {
System.out.println(this.baz);
}
}
答案 2 :(得分:1)
您必须在变量前加上类名称,因为变量不在 RunPennyPinch 类中。
System.out.print(Prizes.prizes[1]);
您可能还需要导入奖品课程,具体取决于您的设置。
答案 3 :(得分:0)
变量本身并不存在于该上下文中。它是另一个类的静态成员。所以你需要一个对该类的引用:
System.out.print(Prizes.prizes[1]);
答案 4 :(得分:0)
静态的主要优点是您不必创建一个对象来访问该变量。您只需通过Classname.variablename调用该变量(Classname是该变量所在的类的名称)
System.out.print(Prizes.prizes[1]);