2016-07-28 8 views
0

В мире JAVA переменные поля имеют значения по умолчанию, если вы их не инициализируете, а локальные переменные - нет.JAVA Значение по умолчанию Значение причины

Я много думал и много искал, но я до сих пор не понимаю. Почему дизайн JAVA выглядит так? Кстати, я думаю, что это имеет какое-то отношение к куче и стекю.

+1

См. [Ответ Джона Скита] (http://stackoverflow.com/a/1560704/3788176) к соответствующему вопросу. –

+0

@ AndyTurner Хорошо, что вы там поместили ссылку. Я почти за это для каждого и хороший вопрос/ответ здесь, один ответ пришел от Джона ;-) – GhostCat

ответ

1

Локальные переменные гораздо легче проверить, что переменная всегда инициализируется в относительно ограниченной области, когда вы можете определить пути кода. Это не всегда получается правильно, но делает хорошую работу, если код не запутан.

final поля также должны быть инициализированы, хотя только один раз. Когда один конструктор вызывает другого, он может запутаться.

Для не окончательных полей очень сложно обеспечить инициализацию поля, прежде чем оно будет использоваться для всех возможных путей кода. например как он может гарантировать, что setter всегда вызывается перед getter, если эти вызовы сделаны из другого класса, который может быть изменен в будущем.

Вместо этого JVM оставляет значения по умолчанию и заставляет вас беспокоиться.

0

Ну, это очень хороший дизайн, на мой взгляд. Компилятор пытается проверить, не сделал ли программист ошибок. Локальная переменная должна быть инициализирована вручную, чтобы избежать неожиданных проблем, поскольку она обычно используется для выполнения некоторых дополнительных вычислений или действий и со значением по умолчанию может быть очень трудно отслеживать такую ​​ошибку в будущем. Обязанностью программиста является правильная инициализация локальной переменной и ее использование в коротком блоке кода.