Локальные переменные гораздо легче проверить, что переменная всегда инициализируется в относительно ограниченной области, когда вы можете определить пути кода. Это не всегда получается правильно, но делает хорошую работу, если код не запутан.
final
поля также должны быть инициализированы, хотя только один раз. Когда один конструктор вызывает другого, он может запутаться.
Для не окончательных полей очень сложно обеспечить инициализацию поля, прежде чем оно будет использоваться для всех возможных путей кода. например как он может гарантировать, что setter
всегда вызывается перед getter
, если эти вызовы сделаны из другого класса, который может быть изменен в будущем.
Вместо этого JVM оставляет значения по умолчанию и заставляет вас беспокоиться.
См. [Ответ Джона Скита] (http://stackoverflow.com/a/1560704/3788176) к соответствующему вопросу. –
@ AndyTurner Хорошо, что вы там поместили ссылку. Я почти за это для каждого и хороший вопрос/ответ здесь, один ответ пришел от Джона ;-) – GhostCat