Цитируемый текст:
«Однако полагаться на такие значения по умолчанию считается плохим стилем программирования».
Цинично: «обычно считается, что» часто является способом сказать, что автор не пытался найти авторитетный источник для представляемого утверждения.
В этом случае утверждение явно сомнительно. Свидетельство: 5 из 5 выбранных руководств по стилю Java НЕ говорят о том, следует ли вам полагаться на значения по умолчанию:
(Обратите внимание, что моя методология выборки состояла в том, чтобы посмотреть на первые 5 различных поисковых запросов Google на предмет «руководства по стилю java». Затем я искал в каждом документе «default». Это не тщательный анализ, но он служит моей точкой зрения. )
ХОРОШО. Так действительно ли это помогает читабельности кода Java?
Это спорно.
С одной стороны, начинающий Java-программист, который не узнал об инициализации по умолчанию, может быть сбит с толку тем, откуда берутся нули или нули. Но если они пытаются найти явную инициализацию и обнаруживают, что ее нет, этого должно быть достаточно, чтобы они прочитали учебник или книгу, чтобы узнать об инициализации по умолчанию. (Вы бы надеялись!)
С другой стороны, мы обычно не ожидаем, что начинающие Java-программисты будут поддерживать производственные базы кода. Для опытного Java-программиста избыточная инициализация не улучшает читабельность. Это (в лучшем случае) шум.
На мой взгляд, единственная вещь, которая достигается избыточной инициализацией поля, - это сообщить будущему читателю вашего кода, что вы подумали о начальном значении. (Как выразился @GhostCat, инициализация по умолчанию не передает намерения.)
Но, с другой стороны, если бы я был таким читателем, я бы не обязательно доверял размышлениям автора кода. Так что ценность этого «сигнала» тоже сомнительна.
Как насчет надежности?
В Java это не имеет значения. JLS указывает , что инициализация по умолчанию это происходит для полей. И наоборот, для локальных переменных это ошибка компиляции, чтобы попытаться использовать переменную, которая не была определенно инициализирована.
Короче говоря, поведение переменной, которая не инициализирована явно, полностью предсказуемо.
В отличие от таких языков, как C или C ++, где переменные не могут быть инициализированы, поведение не определено и может привести к сбоям и различиям в поведении на разных платформах. Случай всегда явной инициализации переменных здесь гораздо сильнее.
Как насчет производительности?
Это не должно иметь никакого значения. JIT-компилятор должен обрабатывать избыточную инициализацию и инициализацию по умолчанию как одно и то же.
private int count = 0;
это код, который ничего не делает, и код, который ничего не делает, беспорядок. Это похоже на импорт классов из java.lang или объявление класса с помощьюextends Object
.