[英]Is it possible to avoid using "static" when call variable from another class?
從另一個類調用變量時是否能夠避免使用“靜態”? 非常感謝您
這是我的代碼。
class Hello {
public static String say = "Hello World"; //I using static
public void born() {
System.out.println(say);
}
}
public class SayHello extends Hello {
public static void main(String[] args) {
Hello myHello = new Hello();
myHello.born();
System.out.println(say);
}
輸出:
Hello World
Hello World
如果我使用public String say = "Hello World";
它輸出Hello World null
AnyIdea 在從另一個類調用變量時避免使用“靜態”? 非常感謝您
靜態變量對於類的所有實例(或對象)是通用的,因為它是類級別的變量。 換句話說,您可以說只創建了一個靜態變量的副本,並在類的所有實例之間共享。
所以如果你不想使用靜態,那么你就不能在類的其他實例中使用它。
是的,如果您不將其聲明為靜態,您可以從一個實例中引用它: myHello.say
。 這與調用函數相同。
public class SayHello extends Hello {
public static void main(String[] args) {
Hello myHello = new Hello();
myHello.born();
System.out.println(myHello.say);
}
}
對於常數,即。 一個永遠不會改變並且對於類的所有實例都相同的字符串,將它聲明為靜態並按原樣使用它是有意義的。
如果你沒有將字符串標記為static
你會得到一個編譯錯誤,因為當你在main
方法中執行System.out.println(say)
,你在靜態上下文中使用say
(因為main
方法必須是靜態的)。
如果你刪除System.out.println(say);
然后離開myHello.born();
那么就沒有必要say
是靜態的,因為您只會從非靜態方法(即born()
方法)中使用它。 您可以在此示例中看到它,我注釋了該行並將say
定義為非靜態。
另一種選擇是使println
像這樣,因為變量是公共的: System.out.println(myHello.say);
如果刪除static
,它將無法編譯。 如果您想隱藏靜態字段,可以將其標記為private
。 因此,它們只能被Hello
類的所有實例訪問。 修改或獲取的正確方法是:
class Main extends Hello {
public static void main(String[] args) throws Exception {
Hello myHello = new Hello();
myHello.born();
// System.out.println(say); //doesn't allow access
// System.out.println(Hello.say); //doesn't allow access
System.out.println(myHello.getSay());
}
}
class Hello {
private static String say = "Hello World"; //private
public void born() {
System.out.println(say);
}
public String getSay() {
return say;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.