2014-09-01 3 views
-3

Сценарий 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 (в статическом блоке), поскольку вместе с ней не упоминается тип данных (в качестве кода работает от вершины до нижнего).

+2

Не ваш вопрос на самом деле ответ на ваш вопрос? –

+0

Не нормально ли код запускается сверху вниз? Если вы меняете порядок двух операторов, они не меняют порядок их запуска? Где здесь сюрприз? –

+0

@PeterLawrey lawrey В сценарии 2, как он присваивает памяти переменной foo, поскольку вместе с ней не упоминается тип данных в статическом блоке. – atti

ответ

0

Статические блоки/переменные выполняются в порядке их размещения в исходном коде. т. е. порядок, который вы видите своим глазом.

Сверху донизу.

+0

@downvoter, позаботьтесь о комментариях. Я хотел бы исправить свой пост. –

+0

-3. давай давай. Я подбодрю тебя, ребята. ха-ха –

Смежные вопросы