Почему я не могу выполнить присваивание вне метода?
Если я пытаюсь присвоить значение переменной в классе, но вне метода, я получаю сообщение об ошибке.
classone{ Integer b; b=Integer.valueOf(2); }
но, если я инициализирую его во время создания, это работает.
classone{ Integer b=Integer.valueOf(2); }
Внутри метода это работает в обоих случаях.
Переведено автоматически
Ответ 1
вам нужно сделать
classone{ Integer b; { b=Integer.valueOf(2); } }
операторы as должны отображаться в блоке кода.
В этом случае блок представляет собой блок инициализации, который добавляется к каждому конструктору (или конструктору по умолчанию в данном случае) Оно выполняется после любого вызова super() и перед основным блоком кода в любом конструкторе.
Кстати: у вас может быть статический блок инициализатора с static { } который вызывается при инициализации класса.
например
classone{ staticfinal Integer b;
static { b=Integer.valueOf(2); } }
Ответ 2
Потому что присваивания являются операторами, а операторы разрешены только внутри блоков кода (методов, конструкторов, статических инициализаторов и т.д.)
Вне этих методов разрешены только объявления.
Это :
classone{ Integer b=Integer.valueOf(2); }
это объявление с инициализатором. Вот почему принято
Ответ 3
Более общим ответом было бы то, что тело класса касается объявлений, а не операторов. Существует специальное положение для операторов, встречающихся в теле класса, но они должны быть явно помечены либо как инициализаторы класса, либо как инициализаторы экземпляра.
Ответ 4
В Java при определении класса вы можете определять переменные со значениями по умолчанию и добавлять методы. Любой исполняемый код (например, присваивания) ДОЛЖЕН содержаться в методе.