Цитований текст:
"Однак, покладаючись на такі значення за замовчуванням, як правило, вважається поганим стилем програмування."
Цинічно: "загалом вважається, що" часто є способом сказати, що автор не намагався знайти авторитетне джерело для викладеного твердження.
У цьому випадку твердження явно сумнівне. Докази: 5 із 5 посібників для стилів Java, відібраних у Зразок, НЕ говорять про те, слід чи слід покладатися на значення за умовчанням:
(Зауважте, моя методологія вибірки полягала в тому, щоб переглянути перші 5 чітких пошукових запитів Google для "керівництва стилем Java". Потім я шукав кожен документ як "за замовчуванням". Це не є ретельним аналізом, але він служить для того, щоб зробити мою думку. )
ДОБРЕ. Так чи справді це допомагає читати код Java?
Це дискусійно.
З одного боку, початківець Java-програміст, який не дізнався про ініціалізацію за замовчуванням, може бути заплутаним щодо того, звідки беруться нулі або нулі. Але якщо вони намагаються шукати явну ініціалізацію і виявляють, що її немає, цього має бути достатньо, щоб вони змусили прочитати підручник або книгу, щоб дізнатися про ініціалізацію за замовчуванням. (Ви сподіваєтесь!)
З іншого боку, ми зазвичай не очікуємо, що початківці програмісти Java підтримуватимуть виробничі кодові бази. Для досвідченого програміста Java надмірна ініціалізація не покращує читабельність. Це (в кращому випадку) шум.
На мій погляд, єдине, що досягається надмірною ініціалізацією поля, - це повідомити майбутньому читачеві вашого коду, що ви подумали про початкове значення. (Як висловив @GhostCat, ініціалізація за замовчуванням не повідомляє про наміри.)
Але навпаки, якби я був цим читачем, я б не обов'язково довіряв думці автора коду. Тож значення цього "сигналу" також сумнівне.
А як щодо надійності?
У Java це не має різниці. JLS вказує , що ініціалізація по замовчуванням це відбувається для полів. І навпаки, для локальних змінних помилка компіляції намагається використовувати змінну, яка не була визначена ініціалізована.
Якщо коротко, поведінка змінної, яка не ініціалізується явно, цілком передбачувана.
На відміну від таких мов, як C або C ++, де змінні не можуть бути ініціалізовані, поведінка не визначено і може призвести до збоїв і відмінностей у поведінці на різних платформах. Справа для завжди явно ініціалізації змінних тут набагато сильніша.
А як щодо продуктивності?
Це не має значення. Компілятор JIT повинен мати можливість розглядати надлишкову ініціалізацію та ініціалізацію за замовчуванням як однакову.
private int count = 0;
це код, який нічого не робить, а код, який нічого не робить, - це захаращення. Це як імпортувати класи з java.lang, або оголошувати клас за допомогоюextends Object
.