簡體   English   中英

靜態方法與Java中的實例字段之間的通信

[英]communication between static method and instance field in java

“靜態方法不能與實例字段通信,只能與靜態字段通信”。 我必須閱讀引號。 當我在該論壇上研究其他線程時,我發現我們可以在靜態方法中使用實例字段,反之亦然。 那么,這句話是什么意思呢? 是真的嗎

您不能在靜態方法中使用非靜態(實例)字段。 這是因為靜態方法未與實例相關聯。

static方法是每個類一個,而一個類可能有許多實例。 因此,如果您有2個實例,那么靜態方法將看到哪個字段?

讓我們想象一下這是有效的:

class Foo {
   private int bar;

   public static int getBar() {
      return bar; // does not compile;
   }
}

接着:

Foo foo1 = new Foo();
foo1.bar = 1;
Foo foo2 = new Foo();
foo2.bar = 2;

Foo.getBar(); // what would this return. 1 or 2?
class MyClass{
  int i ;
  static String res;
  public static void myMethod(){
      i = 10 //not allowed because it is instance non static field
      res = "hello" ; allowed , because it is static field
      new MyClass().i = 10;//allowed as we are accessing it using an instance of that class
  }


}

描述 :靜態字段/方法/ ..與類關聯,而不與該類的對象關聯。 其中成員變量/方法與類的對象相關聯,因此要訪問它們,我們需要類的對象

另請參閱

您不能在靜態方法中使用實例字段。 您指的是哪個實例?

然而一個靜態方法可能需要一個實例的引用,並且因此使用該實例的字段。

例如

public class Stock {
  public double price = 0.0;

  public static void setPriceIncorrectly() {
     price = 0.0 // which price ?
  }

  public static void setPriceCorrectly() {
     Stock s = new Stock();
     s.price = 0.0 // which price ?
  }
}

我發現我們可以在靜態方法中使用實例字段,反之亦然

那不是真的 您不能在“靜態”方法中引用實例字段,因為“靜態”方法不屬於“實例”。

推薦閱讀: http : //download.oracle.com/javase/tutorial/java/javaOO/classvars.html

您不能使用不存在的東西。

當您具有靜態字段或方法時不與實例關聯。 因此非靜態元素不存在。

您始終需要一個實例與實例字段進行通信。 如果您有權訪問實例(例如,param或static字段),則可以訪問其成員。 但是您不能直接訪問該類的實例字段。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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