当我尝试运行此程序时,我收到上述引用错误。使makeHands静态只在灾难中结束,并且使主要非静态无效。我该怎么办?
为了节省空间,代码就在那个链接上。
答案 0 :(得分:2)
像这样写下你的主要方法:
public static void main(String[] args) {
new Main().new Deck().makeHands();
}
这个解释有点令人费解,但我会尽量让它更清楚。
基本上Deck
是inner class
类的Main
。内部类的一个特性(如果它们在这种情况下不是静态的)是实例在没有外部类的实例的情况下不能存在。基本上,Deck
的每个实例都需要引用Main
类的实例,如果没有Deck
,则无法创建Main
实例实例可用。
我上面粘贴的语法将确保存在正确的实例:首先它将创建一个Main实例,然后它将创建一个指向之前创建的Main实例的Deck实例。最后,它将调用非静态方法makeHands()
。
此处提供了更全面的解释:http://download.oracle.com/javase/tutorial/java/javaOO/nested.html
答案 1 :(得分:1)
除非你绝对需要,否则回头看看你为什么需要使用静态变量。由于某种原因,仅使用静态上下文中的静态变量的限制就已到位。
如果您必须这样做,请在非静态函数中实例化该类的新对象并执行所需的操作。