как инициализировать stati c final переменную из другого класса в java - PullRequest
0 голосов
/ 16 января 2020

Я хочу инициализировать Final.value в методе Main. Можно ли инициализировать конечную постоянную stati c в другом классе, кроме класса замедления?

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;


}

1 Ответ

0 голосов
/ 16 января 2020

Вы не можете. Ваше восприятие может состоять в том, что 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.

Создание поля final не меняет этот факт.


У вас есть два варианта инициализации stati c. В блоке инициализации stati c, как вы показали, или в строке:

static final int value = 421

Java не позволяет вам делать то, что вы хотите сделать, по уважительной причине: потому что это может привести к к ошибкам.

...