“静态方法可能无法与实例字段通信,只能与静态字段通信”。我得阅读这个引用的行。当我在这个论坛中研究其他线程时,我发现我们可以在静态方法中使用实例字段,反之亦然。那么,这个引用意味着什么?这是真的吗?
答案 0 :(得分:6)
您不能在静态方法中使用非静态(实例)字段。那是因为静态方法与实例无关。
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?
答案 1 :(得分: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
}
}
描述:静态字段/方法/ ..与类不与该类的对象相关联。其中成员变量/方法与类的对象相关联,因此要访问它们,我们需要类
的对象另见
答案 2 :(得分:1)
您不能在静态方法中使用实例字段。您指的是哪个实例?
然而,静态方法可能具有对实例的引用,因此使用该实例上的字段。
e.g。
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 ?
}
}
答案 3 :(得分:1)
我发现我们可以使用实例 静态方法和恶习中的字段 反之亦然
事实并非如此;你不能在“静态”方法中引用实例字段,因为“静态”方法不属于“实例”。
推荐阅读:http://download.oracle.com/javase/tutorial/java/javaOO/classvars.html
答案 4 :(得分:0)
你不能使用不存在的东西。
当你有静态字段或方法与instace没有关联时。所以非静态元素不存在。
答案 5 :(得分:0)
您始终需要一个实例与实例字段进行通信。如果您有权访问实例(例如param或静态字段),则可以访问其成员。但是你无法直接访问该类的实例字段。