不能从静态上下文中引用非静态变量 [JAVA]

non-static variable cannot be referenced from static context [JAVA]

我们有一个学校项目,我们正在创建基于文本的 Black Jack 游戏。我创建了不同的 classes,例如 BlackJackDeck、Card、Hand、Player 和 Dealer。我的老师希望我们有一个名为 BlackJack 的 class 游戏逻辑。我试图在 BlackJack 中创建一个 main 方法,并添加了一个参考来洗牌我的 BlackJackDeck 牌组。但它说 "non-static variable length leken cannot be referenced from a static context"。如果我没有 main 方法,我的程序将无法 运行。这是我的代码:

package blackjack;
import java.util.ArrayList;

/**
 * @version 1.0
 * @author robert.englund
 */
public class BlackJack {

ArrayList<Spelare> spelare = new ArrayList<>(); //List with players
BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
Dealer dealer = new Dealer(); //The dealer

public static void main(String[] args) {

    leken.blanda(); //Shuffle deck

}


}

我应该怎么做才能使游戏 运行nable 以便我可以编写游戏逻辑? 提前致谢!

你应该实例化BlackJackKortlek leken = new BlackJackKortlek(4);

在您的 main() 方法中。完成后,您可以调用这些方法。

您不能从静态上下文访问非静态变量。 您的变量(非静态)在 main 方法(静态)之外。
声明你的变量如下:

static ArrayList<Spelare> spelare = new ArrayList<>();
static BlackJackKortlek leken = new BlackJackKortlek(4);
static Dealer dealer = new Dealer();

或者在main里面声明:

public static void main(String[] args) {
    ArrayList<Spelare> spelare = new ArrayList<>(); //List with players
    BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
    Dealer dealer = new Dealer();
}

您可以简单地将 leken 声明为静态变量。

private static BlackJackKortlek leken = new BlackJackKortlek(4); 

您还应该阅读 static 关键字的实际含义。

您正试图在 static 方法中访问非静态变量 leken,您不应该这样做,原因是 instance variables 如下图所示仅当您创建对象时,无需创建对象即可访问 static 方法。

public static void main(String[] args) {
   leken.blanda(); // leken is non-static variable.
}

因此,在 main 方法中创建对象。

public static void main(String[] args) {
       BlackJackKortlek leken = new BlackJackKortlek(4); //BlackJackDeck
       leken.blanda(); // leken is non-static variable.
    }