Это потому, что вы не можете иметь исполняемый код в определении класса вне метода. Таким образом, строка
file1 = new File("path");
(которая является утверждением) является недопустимой. Это никогда не будет выполнено. Определение класса обрабатывается во время компиляции, но компилятор не является виртуальной машиной, он не выполняет ваш код. Операторы выполняются во время выполнения.
Как отметил BM, вы можете создать фрагмент кода stati c, который будет выполняться при загрузке класса. Но я считаю, что это эквивалентно вашему второму примеру:
File file1 = new File("path");
(но я признаю, что не проверял байт-код для этого).