Java-对非静态字段列表进行静态引用

Java-对非静态字段列表进行静态引用,java,class,static,instantiation,private-members,Java,Class,Static,Instantiation,Private Members,我刚刚进行了实验,发现当我运行滚动代码时,它不会编译,我也不知道为什么 我的IDE说“不能对非静态字段列表进行静态引用”,但我真的不明白这是什么或为什么。此外,它还适用于什么,即:它是否也只是私有变量和/或方法?为什么 public class MyList { private List list; public static void main (String[] args) { list = new LinkedList(); list.a

我刚刚进行了实验,发现当我运行滚动代码时,它不会编译,我也不知道为什么

我的IDE说“不能对非静态字段列表进行静态引用”,但我真的不明白这是什么或为什么。此外,它还适用于什么,即:它是否也只是私有变量和/或方法?为什么

public class MyList {

    private List list;

    public static void main (String[] args) {
        list = new LinkedList();
        list.add("One");
        list.add("Two");
        System.out.println(list);
    }

}
但是,当我将其更改为以下内容时,它确实起作用:

public class MyList {

    private List list;

    public static void main (String[] args) {
        new MyList().exct();
    }

    public void exct() {
        list = new LinkedList();
        list.add("One");
        list.add("Two");
        System.out.println(list);
    }

}

在第一个示例中,您从静态内容调用非静态字段,这是不可能的。
在第二个示例中,您正在对MyList对象调用ext函数,该对象可以访问该字段。

静态字段是在类的所有实例中共享的字段。
非静态/成员字段特定于类的实例

例如:

public class Car {
  static final int tireMax = 4;
  int tires;
}
在这里,任何给定的汽车都可以有任意数量的轮胎,但所有汽车的最大轮胎数量相同。
如果我们使
tireMax
变量可变,修改该值将意味着所有汽车现在可以有更多(或更少)的轮胎


第二个示例工作的原因是您正在检索一个新MyList实例的
列表。在第一种情况下,您处于静态上下文中,而不是特定实例的上下文中,因此无法访问变量
list

主方法是静态的。它只能访问封闭类的静态成员变量和函数。这个错误是不言自明的。从您的代码来看,您似乎正在尝试创建一个单例工厂。如果这是你的目标,你应该改变
private列表
私有静态列表
@Perception:如果他更改了
私人列表
私有静态列表
在第一个代码中,它应该可以工作???@noMAD-是的,但是对于这个简单的例子,他真的应该在他的主方法中声明列表。@Perception:谢谢,还有最后一个疑问,这也适用于所有静态方法,对吗?不仅仅是
main()