我是否正确使用了 'static' 关键字?

Am I using the 'static' keyword correctly?

我正在尝试从 main 方法调用 class' (Lord.java) 方法。当我第一次尝试这个 Eclipse 时,抛出了关于从静态方法调用非静态方法的错误。然后我将所有 fields/methods 更改为 Eclipse 推荐的静态,这解决了这个问题。我知道很少有情况应该使用 static 并且我不确定我是否在我的代码中正确使用了关键字。如果没有,没有它我该如何重写?

Main.java

package mainPackage;


public class Main {


static Lord Robert = new Lord(15, 'a');
Lord Renly = new Lord(-5, 'b');
Lord Stannis = new Lord(30, 'b');
Lord Oberyn = new Lord(-60, 'b');
Lord Eddard = new Lord(0, 'a');
Lord Tywin = new Lord(90, 'a');


//Instantiatation ends
int fiefs;

public static void main (String args[]) {
    Robert.giveFief();
    System.out.print(Robert.relationship);
}
}

Lord.java

package mainPackage;

public class Lord {

    protected static int relationship;
    protected char clique;

    public Lord(int a, char b) {
        relationship = a;
        char clique = b;
    }


    public static int giveFief() {
        relationship +=10;
        return relationship;

    }
    }

static关键字表示您不需要此类型的实例来使用特定字段或方法。 相反是,如果您确实有一个声明为static的字段,那么每个实例将具有相同的值。

鉴于此,您有几个主要问题:

    对于 Lord 的所有实例,
  • relationship 将设置为 90。这显然不是你想要的。
  • Main 中,您只能与 main 内部的 Robert 交互,因为这是您声明的唯一不需要 [=14= 实例的变量] 使用。

第一个问题很容易解决 - 从该字段中删除 static。第二个同样简单 - 从字段 中删除 static 并且 将所有实例化语句移动到 main 方法中。