无法在构造函数中初始化静态final字段

时间:2015-02-20 16:16:01

标签: java final

为什么我不允许在以下情况下分配最终修饰符:

public static final float aspectRatio;

public TestBaseClass() {
    // TODO Auto-generated constructor stub
    screenWidth = Gdx.graphics.getWidth();
    screenHeight = Gdx.graphics.getHeight();
    aspectRatio = screenWidth/screenHeight;

}

我想当我将变量声明为final并将其留空(未初始化)时,我需要在构造函数中添加一个值,因为它是第一个被调用的,每个类都有一个。

但我从eclipse中得到一个错误:The final field TestBaseClass.aspectRatio cannot be assigned

为什么呢?

1 个答案:

答案 0 :(得分:4)

aspectRatiostatic,但您尝试在构造函数中初始化它,每次创建新的实例时都会设置它。根据定义,这不是最终的。请尝试使用静态初始化块。

public static final float aspectRatio;
static {
    screenWidth = Gdx.graphics.getWidth();
    screenHeight = Gdx.graphics.getHeight();
    aspectRatio = screenWidth/screenHeight;
}    
public TestBaseClass() {
    // Any instance-based values can be initialized here.
}