Хммм, я не уверен в этом, но я поделюсь с вами своим предположением.Инициализация начинается сначала для всего, что является статическим в Классе (в определенном порядке).Таким образом, ваш static{...}
будет сначала инициализирован, а затем statVar
получит его значение.Первая печать должна показывать 0, так как это значение int по умолчанию.Это работает, потому что вы ссылаетесь на него по имени класса, и именно так должны ссылаться статические переменные.Существует одна статическая переменная для класса, а не для объекта.Когда вы пытаетесь сослаться на него без имени класса, вы воспринимаете это как некое поле в вашем классе, и вам не следует пытаться ссылаться на них до того, как они будут определены.Таким образом, компилятор не позволяет это сделать.