首页 > 解决方案 > 如何在java中从其他类初始化静态最终变量

问题描述

我想在 Main 方法中初始化 Final.value。 是否可以在其他类中初始化静态最终常量而不是在其减速类中?

public class Main {

    public static void main(String[] args) {
        //I want to initialize Final.value in Main method.
    }

}

class Final {
    //here is the static final variable which can be assigned vai a static block
    //but how do I initialize it in the main method if I don't use the static block?
    static final int value;


}

标签: javaclassstaticconstantsfinal

解决方案


你不能。您的看法可能是这main发生在其他所有事情之前,因此在那里初始化事物是安全的,但这是不正确的。

考虑以下代码。

class Scratch
{
    static
    {
        System.out.println(Foo.i);    
    }

    public static void main(String[] args)
    {
        Foo.i = 100;
    }
}

class Foo
{
    static int i;
}

它不打印 100。它打印 0 因为之前发生了其他事情main

使该领域成为最终并不会改变这一事实。


您有两个静态初始化选项。在静态初始化程序块中,就像您展示的那样,或者内联:

static final int value = 421

Java 阻止您做您想做的事情是有充分理由的:因为它可能会导致错误。


推荐阅读