最终不能公开静态

时间:2014-12-15 19:53:29

标签: java access-modifiers

我确信这是一个非常简单的解释,它会让我感到愚蠢,但我无法理解。 Pastebin,第18行:

public static boolean loadTextures() {
    try {
        final Texture STONE = loadPNG("main\\textures\\stone.png"); // This line here I can't do public static final...         
    } catch (IOException e) {
         return false;
    }
    return true;
}

我希望STONEpublic static final,但eclipse表示只有final才是合法修饰符。 我如何宣布public static final变量?

3 个答案:

答案 0 :(得分:8)

您不能在方法中声明静态变量,因为方法只有局部变量。

将其移出您的方法。

改变这个:

public static boolean loadTextures() {
                try {
                        final Texture STONE = loadPNG("main\\textures\\stone.png"); // This line here I can't do public static 

到此:

public static final Texture STONE = loadPNG("main\\textures\\stone.png");
public static boolean loadTextures() {
                try {

答案 1 :(得分:1)

publicstatic是可以应用于数据成员的修饰符。在您的示例中,STONEloadTextures()方法范围内的局部变量。

您可以将其定义为public static final数据成员,并在static块中初始化:

public static final Texture STONE;
static {
    try {
        STONE = loadPNG("main\\textures\\stone.png");
    } catch (IOException e) {
        // some error handling...
    }
 }

这里可以看到的最大问题是异常处理。由于这是在类加载器加载类时调用的,因此没有真正的良好方法来处理那里的潜在异常。

答案 2 :(得分:0)

final是唯一允许局部变量的有效修饰符。您需要将其移出方法并在类级别声明变量。