簡體   English   中英

從另一個類調用變量時是否可以避免使用“靜態”?

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

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