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