2014-10-10 60 views
1
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]); 

     } 
} 

我试图访问不同类中的数组“奖品”,但它一直说“奖品”无法解析。如果你能告诉我如何解决这个问题,那就太好了。无法访问不同类别的变量

+2

如果'prizes'数组有少量类会怎样?编译器或JVM应该如何知道你想访问哪一个?你如何看待这个问题可以解决? – Pshemo 2014-10-10 22:34:52

回答

1

由于该变量不在RunPennyPinch类中,因此必须在变量中加上类名前缀。

System.out.print(Prizes.prizes[1]); 

您可能还导入奖品类,根据您的设置。

0

该变量本身在该上下文中不存在。它是另一个类的静态成员。所以,你需要的是类的引用:

System.out.print(Prizes.prizes[1]); 
2

如果你是在另一个类引用静态字段,您将需要使用类的名称引用外地,所以基本上你需要改变你的主来这:

public class RunPennyPinch { 
    public static void main(String[] args) { 
     System.out.print(Prizes.prizes[1]); 

    } 
} 
0

静态的主要优点是,你不必创建一个对象来访问该变量。你只需要调用由Classname.variablename变量(类名是类的名称,其中变量存在)

System.out.print(Prizes.prizes[1]); 
2

这就是所谓的命名空间的问题。让我们假装你可以做你想做的事情。如果您创建另一个名为Prizes2的类,并在其中添加了另一个变量,又名为prizesRunPennyPinch如何知道应该使用哪个prizes变量?

也许你可以通过说“一次只允许一个prizes变量存在于任何程序中”来解决这个问题。如果这是一个真正的限制,你会很快用完有意义的名称来给变量。

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.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); 
    } 
}