Java最终变量初始化

时间:2014-06-17 12:13:31

标签: java

我收到一个错误,指出即使我在构造函数中初始化了size变量,也可能没有初始化它。为什么这不起作用?=

public class Ore {

protected static final float size;
protected String name;
protected int itemID;
protected ArrayList<Mineral> minerals;

public Ore(float size, String name, int itemID){
       this.size = size;
       this.name = name;
       this.itemID = itemID;
    }

    public String getPrizeData(int itemNumber){
       String data = null;

       return data;
    }

    public float getPrice(){
        float price = 0;

        return price;
    }
}

4 个答案:

答案 0 :(得分:4)

从大小中删除static修饰符...我很确定你不想在那里;)

答案 1 :(得分:1)

protected static final float size;

finalstatic的组合在java中被视为 CONSTANT 编译器替换了常量名称( Here size)代码中的任何地方及其在编译期间的值,因此不允许在constructor初始化它并生成编译时错误。


所以要么选择 vikingsteve的解决方案,要么在宣布时初始化它。

答案 2 :(得分:0)

size是一个静态字段。因此,它必须直接在声明中初始化或形成静态初始化程序,即如下所示:

public class Ore {

    protected static final float size;

    static{
        size = // add something here
    }
    //....
}

答案 3 :(得分:0)

可以从Ore派生类,并在引用size的派生类中实现公共静态函数。这是在初始化之前可以访问size并且编译器正确识别它的一种方式。

一种解决方法是在Ore中使用静态初始化程序段初始化size,或将其值设置为文字:protected static final float size = /*ToDo - a literal here*/;