2014-10-10 27 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); 
    } 
}