【发布时间】:2012-04-17 23:39:58
【问题描述】:
我刚刚在试验,发现运行滚动代码时,编译不出来,不知道是什么原因。
我的 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);
}
}
【问题讨论】:
-
主要方法是静态的。它只能访问封闭类的静态成员变量和函数。这个错误是不言自明的。
-
从您的代码看来,您正在尝试创建一个单例工厂。如果这是您的目标,您应该将
private List list;更改为private static List list; -
@Perception:所以如果他在第一个代码中将
private List list;更改为private static List list;,它应该可以工作??? -
@noMAD - 是的,尽管对于这个简单的例子,他真的应该在他的 main 方法中声明列表。
-
@Perception:谢谢,最后一个疑问,这也适用于所有静态方法,对吗?不只是
main()?
标签: java class static instantiation private-members