Сценарий 1:Статический блок против статической переменной порядок инициализации
class A{
static int foo=56789;
static{
foo=999;
}
public static void main(String[] args) {
System.out.println(foo);
}
}
Выход: 999
Сценарий 2:
class A{
static {
foo=999;
}
static int foo=56789;
public static void main(String[] args) {
System.out.println(foo);
}
}
Выход: 56789
В сценарии 2, как это делает выделять память для переменной foo (в статическом блоке), поскольку вместе с ней не упоминается тип данных (в качестве кода работает от вершины до нижнего).
Не ваш вопрос на самом деле ответ на ваш вопрос? –
Не нормально ли код запускается сверху вниз? Если вы меняете порядок двух операторов, они не меняют порядок их запуска? Где здесь сюрприз? –
@PeterLawrey lawrey В сценарии 2, как он присваивает памяти переменной foo, поскольку вместе с ней не упоминается тип данных в статическом блоке. – atti