Java-如何在静态方法中使用变量

Java-如何在静态方法中使用变量,java,Java,我不知道当方法是静态的时如何使用变量,main必须是哪个?。以下是一个例子: import java.util.Scanner; public class Yatzy { Scanner input = new Scanner(System.in); protected static int reply; public static void main(String[] args){ startGame(); } public st

我不知道当方法是静态的时如何使用变量,main必须是哪个?。以下是一个例子:

import java.util.Scanner;
public class Yatzy {
    Scanner input = new Scanner(System.in);
    protected static int reply;   

    public static void main(String[] args){
        startGame();
    }
    public static void startGame(){
        System.out.println("How many players? 1 - 3.");
        reply = input.nextInt(); // Option 1: class variable
        int userinput = input.nextInt(); // Option 2: instance variable
    }
}
无论我以何种方式尝试,我总是会遇到以下错误:

错误:无法从静态上下文引用非静态变量输入


如何在静态方法中使用用户输入或更一般的变量?

错误消息很清楚,这是java中的一个基本概念,也是一个非常基本的概念。您试图引用静态区域内的变量,因此应该在静态区域中创建该变量

static Scanner input = new Scanner(System.in);
我会成功的

使用静态变量和方法

在上面的示例中,所有方法和变量都在静态区域中

static Scanner input = new Scanner(System.in);
使用实例变量和方法


在main方法中为类创建一个新对象并调用startGame。

您应该首先了解static关键字的确切含义和用途。当你知道这一点后,问题就会非常清楚。如果某个对象是静态的,那么它就不再属于对象实例。如果某个对象不是静态的,则它属于对象实例。就像一个阶级的人会有一个成员年龄。这个成员不应该是静态的,因为每个人都有自己不同的年龄。如果将其设为静态,每个人都将共享完全相同的年龄,因为变量不再绑定到特定实例,而是在所有实例之间共享。在您的特定示例中,变量输入的行为与所述年龄类似。它属于Yatzy的实例。因此,您需要创建一个实例并从那里调用它:Yatzy game=newyatzy;然后是game.input.nextInt;。在您的特定场景中,我认为如果一切都是非静态的,那会更好,因为应该可以创建多个Yatzy游戏,并且它们不应该相互干扰。请接受对您解决问题最有帮助的答案。它有助于未来的读者。如果答案没有帮助,请在下面留下评论。因此,海报可以相应地更新它们。虽然这样做有效,但我认为在这个特定场景中,最好使所有内容都非静态。因为应该可以创建一个Yatzy游戏的多个实例。那么,你必须创建一个Yatzy类的新对象,然后引用你的变量。然而,主要的方法必须是静态的。是的,我的意思是,如果你愿意,你可以在你的答案中加上一个例子来提高质量。@Zabuza对不起,我以为你是问这个问题的人。。。我也加了一句..@JouniKouvo检查更新的答案,欢迎您。。
import java.util.Scanner;
public class Yatzy {
    Scanner input = new Scanner(System.in);
    int reply;   

    public static void main(String[] args){
        new Yatzy().startGame();
    }
    public void startGame(){
        System.out.println("How many players? 1 - 3.");
        reply = input.nextInt();
        int userinput = input.nextInt();
    }
}