无法对非静态类成员进行静态引用

问题描述:

在下面的类中,我有一个非静态的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,它就可以工作。但我不明白为什么该方法会影响在非静态变量上调用非静态方法的能力。

编辑:我知道如何解决这个问题......我的问题是,这是为什么发生在第一个地方?

+0

强调:'static'方法,非'static'变量。 – 2014-10-31 02:09:32

+0

请你详细说明一下吗?我知道。我不明白为什么我的方法很重要。该变量不是静态的,我调用该变量的方法不是静态的。 – Evorlor 2014-10-31 02:09:53

+2

非静态变量属于实例。你没有一个实例。 – 2014-10-31 02:10:29

它应该是:

private static ArrayList 

不使可变静态和在静态方法中使用它是不能接受的,因为在一个类中的非静态变量需要类/变量被初始化。

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

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

更多信息/重复的问题:

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

+0

我知道。问题是为什么。 – Evorlor 2014-10-31 02:21:25

+0

您必须创建一个构造函数并调用它。非静态意味着有多个对象实例,并且固有地将会是多个数组列表。 – user1274820 2014-10-31 02:22:58

+0

http://*.com/questions/413898/what-does-the-static-keyword-do-in-a-class更多信息在这里 – user1274820 2014-10-31 02:24:38