O texto citado é:
"Contar com esses valores padrão, no entanto, geralmente é considerado um estilo de programação ruim".
Cinicamente: "geralmente se considera que" é frequentemente uma maneira de dizer que o autor não tentou encontrar uma fonte autorizada para a declaração que está sendo apresentada.
Nesse caso, a afirmação é claramente questionável. Evidência: 5 de 5 Java Style Guides amostrados NÃO dizem nada sobre se você deve ou deve confiar nos valores padrão:
(Observe, minha metodologia de amostragem foi examinar os 5 primeiros hits distintos da pesquisa no Google por "guia de estilo java". Depois, procurei em cada documento por "padrão". Esta não é uma análise completa, mas serve para esclarecer. )
ESTÁ BEM. Isso realmente ajuda na legibilidade do código Java?
Isso é discutível.
Por um lado, um programador iniciante em Java que não tenha aprendido sobre a inicialização padrão pode ficar confuso sobre a origem dos zeros ou nulos. Mas se eles se preocupam em procurar uma inicialização explícita e descobrir que não há uma, isso deve ser suficiente para fazer com que eles leiam um tutorial ou livro para descobrir sobre a inicialização padrão. (Você esperaria!)
Por outro lado, normalmente não esperamos que programadores Java iniciantes mantenham bases de código de produção. Para um programador Java experiente, uma inicialização redundante não melhora a legibilidade. É (na melhor das hipóteses) ruído.
Na minha opinião, a única coisa que é obtida com uma inicialização redundante de um campo é sinalizar para um futuro leitor do seu código que você pensou sobre o valor inicial. (Como o @GhostCat o expressou, a inicialização padrão não comunica intenção.)
Por outro lado, se eu fosse esse leitor, não confiaria necessariamente no pensamento do autor do código. Portanto, o valor desse "sinal" também é questionável.
E quanto à confiabilidade?
Em Java, não faz diferença. A JLS especifica que a inicialização padrão não ocorrer por campos. E, inversamente, para variáveis locais, é um erro de compilação tentar usar uma variável que ainda não foi definitivamente inicializada.
Em resumo, o comportamento em tempo de execução de uma variável que não é explicitamente inicializada é totalmente previsível.
Por outro lado, em linguagens como C ou C ++, onde variáveis não podem ser inicializadas, o comportamento não é especificado e pode levar a falhas e diferenças de comportamento em diferentes plataformas. O caso de sempre inicializar explicitamente variáveis é muito mais forte aqui.
E o desempenho?
Não deve fazer diferença. O compilador JIT deve poder tratar uma inicialização redundante e uma inicialização padrão da mesma forma.
private int count = 0;
é código que não faz nada, e código que não faz nada é desordem. É como importar classes do java.lang ou declarar uma classe comextends Object
.