“非静态方法makeHands()不能从静态上下文中引用”这意味着什么,我该如何避免它?

时间:2011-04-29 18:45:07

标签: java static

当我尝试运行此程序时,我收到上述引用错误。使makeHands静态只在灾难中结束,并且使主要非静态无效。我该怎么办?

http://pastebin.com/XPDKK7XR

为了节省空间,代码就在那个链接上。

2 个答案:

答案 0 :(得分:2)

像这样写下你的主要方法:

public static void main(String[] args) {
    new Main().new Deck().makeHands();
}

这个解释有点令人费解,但我会尽量让它更清楚。

基本上Deckinner class类的Main。内部类的一个特性(如果它们在这种情况下不是静态的)是实例在没有外部类的实例的情况下不能存在。基本上,Deck的每个实例都需要引用Main类的实例,如果没有Deck,则无法创建Main实例实例可用。

我上面粘贴的语法将确保存在正确的实例:首先它将创建一个Main实例,然后它将创建一个指向之前创建的Main实例的Deck实例。最后,它将调用非静态方法makeHands()

此处提供了更全面的解释:http://download.oracle.com/javase/tutorial/java/javaOO/nested.html

答案 1 :(得分:1)

除非你绝对需要,否则回头看看你为什么需要使用静态变量。由于某种原因,仅使用静态上下文中的静态变量的限制就已到位。

如果您必须这样做,请在非静态函数中实例化该类的新对象并执行所需的操作。