Почему от положения статического блока зависит результат? Ведь порядок инициализации не изменяется, т.е. сначала статические поля, потом статический блок. Поставь я его хоть в самый конец результат меняться не должен. Однако, он меняется. +Если сначала инициализируются статические поля, то каким образом потом изменяется значение константы, если оно уже проинициализировано и == 0? public class Solution { static { try (BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))) { A = Integer.parseInt(reader.readLine()); B = Integer.parseInt(reader.readLine()); } catch (IOException e) { System.err.println(e); } } public static int A; public static int B; public static final int MIN = min(A, B); public static void main(String[] args) { System.out.println(MIN); } public static int min(int a, int b) { return a < b ? a : b; } }