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