Порядок инициализации статической переменной, Java [duplicate]

Возможный дубликат:

Инициализация статического класса Java

в каком порядке выполняются статические блоки и статические переменные в классе?

Когда я запускаю этот код, ответ равен 1, я думал, что это будет 2. Каков порядок инициализации и значение k на каждом шаге?

public class Test {

static {k = 2;}
static int k = 1;

public static void main(String[] args) {
    System.out.println(k);
}
}

Редактировать 1: Как продолжение "k установлен в значение по умолчанию " тогда почему следующий код нет компилировать? Theres ошибка "Не могу сослаться на поле перед нимопределено ".

public class Test {

static {System.out.println(k);}
static int k=1;

public static void main(String[] args) {
    System.out.println(k);
}
}

Редактировать 2: По какой-то неизвестной мне причине это ^ работает, когда вместо "k" его "Test.k».

Спасибо за ответы на все вопросы. этого будет достаточно: D

Ответы на вопрос(2)

Ваш ответ на вопрос