【问题标题】:Cannot make a static reference to the non-static class member [duplicate]无法对非静态类成员进行静态引用[重复]
【发布时间】: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


【解决方案1】:

应该是:

private static ArrayList

不将变量设为静态并在静态方法中使用它是不可接受的,因为类中的非静态变量需要初始化类/变量。

您可以使用构造函数创建一个单独的类并实例化该对象,如果您想以这种方式使用它......无论出于何种原因。

或者,您可以在添加构造函数后在静态方法中初始化您的类。

更多信息/重复问题:

What does the 'static' keyword do in a class?

【讨论】:

  • 我知道。问题是为什么。
  • 你必须创建一个构造函数并调用它。非静态意味着对象有多个实例,并且本质上是多个数组列表。
猜你喜欢
  • 2021-08-31
  • 2014-06-08
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多