簡體   English   中英

無法訪問不同類中的變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM