我使用的是静态'关键字正确?

时间:2018-04-23 15:44:11

标签: java static non-static

我想打电话给一个班级' (Lord.java)方法来自main方法。当我第一次尝试这个Eclipse时,抛出了从静态方法调用非静态方法的错误。然后我将所有字段/方法更改为Eclipse推荐的静态,这解决了这个问题。我知道应该使用静态的情况很少,而且我不确定我是否在代码中正确使用了关键字。如果没有,我怎么能在没有它的情况下重写呢?

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;

    }
    }

1 个答案:

答案 0 :(得分:2)

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

从这个角度来看,你有几个主要问题:

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

第一个问题很容易解决 - 从该字段中删除static。第二个就是直截了当 - 从字段中删除staticmain方法中移动所有实例化语句。