[英]Unable to access variables in different classes
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]);
}
}
我正在嘗試在不同的類中訪問數組“獎品”,但一直說“獎品”無法解析。 如果您能告訴我如何解決此問題,那就太好了。
如果要在另一個類中引用靜態字段,則需要使用該類的名稱來引用該字段,因此,基本上,您需要將main更改為此:
public class RunPennyPinch {
public static void main(String[] args) {
System.out.print(Prizes.prizes[1]);
}
}
這稱為命名空間問題。 假設您可以做您想做的事。 如果您創建另一個類稱為Prizes2
並在其中放置另一個變量(也稱為prizes
怎么辦? RunPennyPinch
如何知道應該使用哪個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);
}
}
您必須在變量之前加上類名,因為該變量不在RunPennyPinch類之內。
System.out.print(Prizes.prizes[1]);
您可能還需要導入獎品類,具體取決於您的設置。
該變量本身在該上下文中不存在。 它是另一個類的靜態成員。 因此,您需要對該類的引用:
System.out.print(Prizes.prizes[1]);
靜態的主要優點是您無需創建對象即可訪問該變量。 您只需要通過Classname.variablename調用該變量(Classname是該變量所在的類的名稱)
System.out.print(Prizes.prizes[1]);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.