【发布时间】:2014-10-31 02:07:26
【问题描述】:
在下面的课程中,我有一个非静态的ArrayList。我正在对该ArrayList 进行非静态方法调用(add())。但我的 IDE 告诉我,我正在进行静态调用 (Cannot make a static reference to the non-static field arrayList)。
import java.util.ArrayList;
public class Test {
private ArrayList<String> arrayList = new ArrayList<String>();
public static void main(String[] args) {
arrayList.add("str");
}
}
为什么不允许这样做?如果我在静态方法(main)中声明 ArrayList,它就可以工作。但我不明白为什么该方法会影响对非静态变量调用非静态方法的能力。
编辑:我知道如何解决问题...我的问题是,为什么会发生这种情况?
【问题讨论】:
-
强调:
static方法,非static变量。 -
您能详细说明一下吗?我知道。我不明白为什么我的方法很重要。变量不是静态的,我在变量上调用的方法也不是静态的。
-
非静态变量属于实例。您没有实例。
-
你的方法是静态的。您只能在静态方法中使用静态变量。如果您将arrayList设为静态,它将消除错误。
-
回答这个问题的关键是理解每个实例一个与每个类一个的区别。当您声明一个静态变量时,它成为整个系统中唯一的此类变量。当您声明一个实例变量时,它可能成为许多此类变量之一,每个变量都附加到自己的实例。一个静态变量可以通过它的名字来识别:这就足够了,因为只有一个。然而,对于实例变量,仅仅一个名称是不够的,因为您需要知道两件事 - 变量的名称是什么,以及它附加到哪个实例。
标签: java reference static non-static