为什么我需要在这里使用静态?在这种情况下,我似乎不需要它

时间:2018-10-30 04:28:49

标签: java

我最近才学Java。这是我编码的第一天。我有两节课。一个是获取用户输入并输出用户输入的类,另一个是具有自己的方法和变量的类。

第1类:

public class Player {
    // this is my player class
    private static int health;

    public void setHealth(int healthToSet) {
        health = healthToSet;
    }

    public static int getHealth() {
        return health;
    }
}

CLASS 2:

import java.util.Scanner;

public class Obtainer {
    public static void main(String[] args) {
        System.out.println("Enter a number you'd like to set your health    to...");
        Scanner userInput = new Scanner(System.in);
        int givenInt = userInput.nextInt();

        Player newPlayer = new Player();

        newPlayer.setHealth(givenInt);

        int newHealth = Player.getHealth();

        System.out.println("OK, you have set your health to " +       newHealth);

        userInput.close();
    }

}

Eclipse提示我在getHealth方法中添加一个静态修饰符。在执行私有int健康之后,我不需要使用setHealth进行此操作;而不是private int health = 100;。我知道它说的是静态的,但是那是在提示我将static修饰符添加到getHealth之后的。这有什么意义呢?除了setHealth不返回任何值和getHealth返回一个值的事实之外,getHealth和setHealth有什么区别?那是什么让我需要使用静态修饰符?

3 个答案:

答案 0 :(得分:1)

您应将int newHealth = Player.getHealth();更改为int newHealth = newPlayer.getHealth();

由于您当前是在类而不是对象上调用方法,因此该方法必须是静态的,因此编译器会抱怨它不是。

答案 1 :(得分:1)

是的,在这种情况下,我不会使用静态变量或方法,因此我将更改为

private int health;

public int getHealth() {...}

int newHealth = newPlayer.getHealth();

答案 2 :(得分:0)

您不能使用类名访问实例方法。

选项1: newPlayer.getHealth();

选项2: 如果需要通过类名称访问,请将静态修饰符添加到getHealth()