无法访问不同类中的变量

时间:2014-10-10 22:29:12

标签: java

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]);

        }
}

我正在尝试在不同的类中访问数组'奖品',但它一直说'奖品'无法解决。如果你能告诉我如何解决这个问题,那就太好了。

5 个答案:

答案 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]);